【问题标题】:Utf8_general_ci or utf8mb4 or...?utf8_general_ci 或 utf8mb4 还是...?
【发布时间】:2012-07-17 00:29:53
【问题描述】:

utf16 还是 utf32?我正在尝试以多种语言存储内容。一些语言使用双宽字体(例如,日文字体通常是英文字体的两倍)。我不确定我应该使用哪种数据库。有关这四个字符集之间差异的任何信息...

【问题讨论】:

    标签: utf-8 localization utf-16 utf-32 utf8mb4


    【解决方案1】:

    MySQL的utf32utf8mb4(以及标准的UTF-8)可以直接存储Unicode指定的任何字符;前者的大小固定为每个字符 4 个字节,而后者的大小在每个字符 1 到 4 个字节之间。

    utf8mb3 和原来的utf8 只能存储前 65,536 个代码点,这将涵盖 CJVK(中文、日文、越南、韩文),并且每个字符使用 1 到 3 个字节。

    utf16 前 65,536 个代码点使用 2 个字节,其他所有代码点使用 4 个字节。

    至于字体,这完全是一种视觉上的东西。

    "The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!)"

    另见MySQL documentation for Unicode support

    【讨论】:

    • 为了更加清楚,关于utf8_general 的评论也适用于所有其他utf8_* 排序规则;所有人都将使用 MySQL 的 utf8mb3 aka utf8 字符集。
    • @JohnFlatness 谢谢。你的评论正是我接下来要问的。例如,我认为 UTF-16 使用 2 个字节来表示普通话字符?我正在查看您给我的文档,希望它涵盖了 65,536 的含义。 XD
    • 中文字符在基本多语言平面内(前 65,536 个码点)。
    • 从空间角度看,后两者似乎是更好的选择。
    • utf8utf8mb3 不涵盖所有 CJK 字符,其中一些是 4 字节宽。
    【解决方案2】:

    utf8mb4 是最好的。

    utf8mb4 支持每个字符 4 个字节,而 utf8 支持每个字符 3 个字节,因此它涵盖了更广泛的使用范围而不会出错。

    例如,使用utf8mb4,您可以支持表情符号。如果您尝试在不受支持的字符集中插入表情符号,则会出现错误。

    utf8mb4 是 2 的更现代版本,最终将取代旧版本。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-06-14
      • 2015-10-18
      • 1970-01-01
      • 2023-03-16
      • 1970-01-01
      • 1970-01-01
      • 2014-08-08
      • 1970-01-01
      相关资源
      最近更新 更多