【发布时间】:2012-11-15 13:47:06
【问题描述】:
我知道这个问题已经被问过很多次了,但我很难理解排序规则和编码的区别。
好的,所以我们有一个 MySQL 数据库(实际上有几个),其中包含混合排序规则的表。现在,有些列是utf8_unicode_ci,有些是默认的latin1_swedish_ci。此后,我们使用utf8_unicode_ci 作为默认值。但是我们在 latin1 中有很多“遗留”列。
我们喜欢一致性,并希望将所有列转换为 utf8。幸运的是,我们 99.9% 的数据是英文的,其中(字面上)有几条记录有西班牙地址(波浪号)。对我们来说非常简单的东西,但我们希望以“正确的方式”做到这一点并完全支持任何语言。因此,utf8_unicode。
我们宁愿不必遍历每个表中的每一列并进行更改。是否有一个简单的脚本可以将每一列转换为utf8_unicode_ci?
另外,我们需要寻找哪些陷阱?我的意思是,如果我错了,并且有我不知道的俄语或日语记录,那么我会遇到问题吗?
也许这应该是一个附带问题,但对于编码,UTF8 更好,因为它可以存储任何语言,对吗?例如,每个字符将有 2 或 4 个字节来表示它在数千个字符的“全局”字母表中应该是什么?对不起,如果这个类比听起来很愚蠢但试图理解。排序规则就是我查询时它们的排序方式。因此,如果将字符存储为A8 9F 用于字母H 和B3 2E 用于字母e 则H 将首先出现,因为A8 在B3 之前出现?
哈,我现在头晕。抱歉,如果这似乎是三个不同的问题,但是当我去管理层并说我需要转换列时,这就是为什么....
谢谢
【问题讨论】:
-
未来 SQL 环境的标准化和兼容性?此外,它将允许使用不同的特殊字符。因此,这取决于您想要适应哪种语言(以及使用哪些特殊字符)。
-
对。这实际上是我将所有内容都转换为
utf8_unicode_ci的论点。我们的应用程序很小,但如果我们无法正确存储西班牙语或俄语,我会很尴尬。 -
因此,转换为无法存储特殊字符的排序规则是没有好处的。我建议转换为可以容纳所有内容的版本。话虽这么说,您真的必须转换吗,您可以同时使用两者而不会出错吗?最后,知道了这一点,你还在问同样的问题吗?
-
嗯,这就是我想要理解的。如果不需要,我不想转换。我想根本问题是,utf 还是不 utf。就是那个问题。 :-) 但是,如果我确实进行了转换,那么什么是一个好的脚本,它不涉及大量的手动转换等。
标签: mysql encoding utf-8 type-conversion latin1