为什么MySQL使用latin1_swedish_ci作为默认值?

时间:2010-10-14 17:55:55

标签: mysql encoding

有谁知道为什么latin1_swedish是MySQL的默认值。在我看来,UTF-8会更兼容吗?

通常会选择默认值,因为它们是最好的通用选择,但在这种情况下,它们似乎并不是他们所做的。

5 个答案:

答案 0 :(得分:39)

据我所知,latin1是前多字节时间的默认字符集,它看起来像是继续存在,可能是出于向下兼容的原因(例如,对于没有指定排序规则的较旧的CREATE语句)。

来自here

  

4.0做了什么

     

MySQL 4.0(及更早版本)仅支持在服务器级别指定的字符集和排序规则与单字节字符编码相结合的概念。默认值为latin1,它对应于latin1的字符集和MySQL 4.1中latin1_swedish_ci的排序规则。

至于为什么 swedish ,我只能猜测是因为MySQL AB是/瑞典语。我看不出选择这种整理的任何其他原因,它带有一些特定的排序怪癖(ÄÖÜ来自Z我认为),但它们远未达到国际标准。

答案 1 :(得分:6)

  

latin1是默认字符集。 MySQL的latin1与。的相同   Windows cp1252字符集。这意味着它与   官方ISO 8859-1或IANA(互联网号码分配机构)   latin1,除了IANA latin1处理0x80之间的代码点   和0x9f为“未定义”,而cp1252,因此MySQL的latin1,   为这些职位分配字符。

来自

http://dev.mysql.com/doc/refman/5.0/en/charset-we-sets.html

可能会帮助您理解原因。

答案 2 :(得分:2)

使用单字节编码比多字节enconding具有一些优势,例如:以字节为单位的字符串长度等于该字符串的长度(以字符为单位)。因此,如果你使用像SUBSTRING这样的函数,那么你的意思是字符或字节是不是很直观。此外,出于同样的原因,它需要对内部代码进行相当大的改动才能支持多字节编码。

答案 3 :(得分:0)

这种奇怪的特征是历史性的。他们就像很久以前那样做了,现在他们不能在不破坏某些应用程序的情况下改变它,具体取决于那种行为。

也许UTF8不受欢迎。或者MySQL可能不支持多字节编码字符串的字符集。

答案 4 :(得分:0)

要扩展为什么不使用 utf8,并解释本线程中其他地方未提及的问题,请注意 mysql utf8 存在问题。这不是utf8!在 utf8 出现之前,Mysql 已经存在很长时间了。如上所述,这可能是它不是默认设置的原因(向后可比性以及对 3rd 方软件的期望)。

在 utf8 还很新不常用的时候,mysql 的开发者好像加入了基本的 utf8 支持,错误地使用了 3 个字节的存储空间。既然它存在,他们选择不将其增加到 4 个字节或将其删除。相反,他们添加了 utf8mb4“多字节 4”,这是真正的 4 字节 utf8。

重要的是,任何将 mysql 数据库迁移到 utf8 或构建新数据库的人都知道使用 utf8mb4。有关详细信息,请参阅 https://adamhooper.medium.com/in-mysql-never-use-utf8-use-utf8mb4-11761243e434