【问题标题】:Differences between utf8 and latin1utf8 和 latin1 的区别
【发布时间】:2011-02-12 03:08:14
【问题描述】:

utf8 和 latin1 有什么区别?

【问题讨论】:

  • 它们是不同的编码(一些字符映射到常见的字节序列,例如ASCII字符和许多重音字母)。 UTF-8 是 Unicode 的一种编码及其所有代码点; Latin1 编码少于 256 个字符。
  • 还有 latin9 在 Linux 语言环境中可用,可以在问题中提到:en.wikipedia.org/wiki/ISO/IEC_8859-15

标签: mysql utf-8 installation latin1


【解决方案1】:

UTF-8 准备好统治世界,Latin1 没有。

如果您尝试使用 Latin1 编码存储非拉丁字符,如中文、日文、希伯来文、俄文等,那么它们最终将成为 mojibake。您可能会发现 this article 的介绍性文本很有用(如果您懂一点 Java,可能会更有用)。

请注意,仅在 MySQL 5.5 中引入了完整的 4 字节 UTF-8 支持。在该版本之前,每个字符最多只能占用 3 个字节,而不是每个字符 4 个字节。因此,它仅支持 BMP 平面,而不支持例如 BMP 平面。表情符号飞机。如果您想要完整的 4 字节 UTF-8 支持,请将 MySQL 升级到至少 5.5 或使用另一个 RDBMS,例如 PostgreSQL。在 MySQL 5.5+ 中,它被称为 utf8mb4

【讨论】:

  • Mysql 5.1 支持 3 byte UTF-8,然而 Mysql 5.5 does support 4 byte UTF-8 as utf8mb4。
  • @BalusC 您能否详细说明如何不完全支持 UTF-8?是不是意味着Mysql 5.1不能存储all个unicode字符?
  • @Pacerier:每个字符仅支持 3 个字节,因此仅支持 BMP(前 65535 个字符),其余不支持。对于所有字符,请参阅en.wikipedia.org/wiki/Plane_(Unicode)
  • @BalusC 对于使用 5.1.63 并且没有权限更新 web 服务器的 mysql 版本的人,有什么替代方案?
  • @Pacerier:您可以保存为VARBINARY 而不是VARCHAR 并自己在业务层中进行解码/编码,但这很hacky。考虑提出一个新问题,也许有更好的方法。
【解决方案2】:

在 latin1 中,每个字符正好是一个字节长。在 utf8 中,一个字符可以包含多个字节。因此 utf8 比 latin1 有更多的字符(并且它们共同的字符不一定由相同的字节/字节序列表示)。

【讨论】:

  • ascii 和 bin 呢?
  • @YoushaAleayoub ASCII 是使用字符 0 到 127 的单字节编码,因此它可以编码的字符数是 latin1 的一半。它是 latin1 和 utf8 的严格子集,这意味着 latin1 和 utf8 中的字节 0 到 127 编码的内容与它们在 ASCII 中的编码相同。 Bin 不是编码。它通常是您在读取文件时可以提供的一个选项,告诉 IO 函数不应用任何编码,而是逐字节读取文件。
  • 谢谢,我的意思是binary整理...?哪个更适合英文/数字字段:ascii_general_ciascii_bin?
猜你喜欢
  • 1970-01-01
  • 2016-03-12
  • 2018-09-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-13
  • 2017-09-04
相关资源
最近更新 更多