• 进入"运维那点事"后,希望您第一件事就是阅读“关于”栏目,仔细阅读“关于Ctrl+c问题”,不希望误会!

MySQL表排序规则不同错误

MySQL FAQ 彭东稳 7年前 (2017-09-26) 22674次浏览 已收录 0个评论

MySQL多表join时报错如下:[Err]1267 – Illegal mix of collations(utf8_general_ci,IMPLICIT) and (utf8_unicode_ci,IMPLICIT) for operation ‘=

就是说两个表的排序规则(COLLATION)不同,无法完成比较。COLLATION是用在排序,大小比较上,一个字符集有一个或多种COLLATION,并且以_ci(大小写不敏感)、_cs(大小写敏感)或_bin(二进制)结束。在做比较时,应该确保两个表的字符排序相同。一般建表的时候不指定,可以走默认的,全是默认的就没什么问题了。

下面来模拟一下各种场景,表结构如下(utf8默认排序规则为utf8_general_ci):

查看表默认排序规则集

查看列排序规则集

从utf8升级为utf8mb4是不支持online ddl的,如下:

从utf8.utf8_general_ci变更为utf8.utf8_unicode_ci是不支持online ddl的,如下:

如果使用下面这种方式修改字符集,你会发现,只更改了表级的,没有更改列级的。

所以真正改字符集的时候别忘了加上CONVERT TO,如下:

要仅仅改变一个表的默认字符集,应使用此语句:

可以发现列字符集没有改变,并且只有新的列才会默认继承表的字符集(utf8.utf8_general_ci)。


如果您觉得本站对你有帮助,那么可以支付宝扫码捐助以帮助本站更好地发展,在此谢过。
喜欢 (1)
[资助本站您就扫码 谢谢]
分享 (0)

您必须 登录 才能发表评论!