How to change the default collation of a database?
我们以前的程序员在一个表(mysql)中设置了错误的排序规则。他用拉丁语排序法设置了它,当时应该是utf8,现在我有问题了。每一张中日文字的唱片都变成了????性格。
是否可以更改排序规则并返回字符的详细信息?
更改数据库排序规则:
ZZU1更改表排序规则:
ZZU1更改列排序规则:
ZZU1更多信息:
- utf8-general和utf8-unicode有什么区别?
- utf8-general和utf8-unicode有什么区别
- 如何更改数据库、表、列的排序规则?
下面介绍如何更改所有数据库/表/列。运行这些查询,它们将输出将整个方案转换为UTF8所需的所有后续查询。希望这有帮助!
--更改数据库默认排序规则
ZZU1--更改表排序规则/字符集
ZZU1—4--更改列排序规则/字符集
ZZU1注意,在MySQL中,EDOCX1字符集只是真正的utf8字符集的一个子集。为了节省一个字节的存储空间,MySQL团队决定只存储三个字节的utf8字符,而不是完整的四个字节。这意味着一些东亚语言和emoji并没有得到充分的支持。为了确保可以存储所有的utf8字符,请在MySQL中使用EDOCX1-1数据类型和EDOCX1-2或EDOCX1-3。
除了DavidWhittaker发布的内容之外,我还创建了一个查询,生成了完整的表和列alter语句,这些语句将转换每个表。跑步也许是个好主意
设置会话组concat max=100000;
首先要确保你的团队海螺不会超过这里看到的非常小的限制。
ZZU1上一个答案的区别在于,它使用的是utf8而不是ut8mb4,使用的是T1.data类型和T1.character(按最大长度计算)对枚举无效。所以,我的查询排除了视图,因为这些视图必须单独修改。
我只是使用Perl脚本以数组的形式返回所有这些更改,并对它们进行迭代,修复了太长的列(通常它们是varchar(256),而数据中通常只有20个字符,所以这是一个简单的修复)。
我发现从Latin1->utf8mb4更改时有些数据已损坏。它似乎是utf8编码的拉丁字符,列中的1字符在转换过程中会出错。我只是简单地保存了来自列的数据,我知道这些列在修改前后会成为内存中的一个问题,并对它们进行比较,生成更新语句来修复数据。
这里很好地描述了这个过程。然而,一些不适合拉丁语的字符却永远消失了。utf-8是拉丁语1的超集。不是反过来。大多数将适合单字节空间,但任何未定义的将不适合(检查Latin1列表-并非所有256个字符都已定义,这取决于MySQL的Latin1定义)