MySQL Unknown error 1267

来自:博客园
时间:2024-03-09
阅读:

1.问题说明

最近在MySQL中运行一段SQL直接报错:
MySQL Unknown error 1267

有一点要说一下,这个navicat给出的报错太简短只有错误码,还得自己去查有点垃圾,不知道新版如何?

2.问题原因

这里可以看到问题出在t2.table_name=t1.table_name无法进行比较。根据网上的资料,也就是说t1和t2两张表的排序规则不一致。那就查一下:

select table_name, TABLE_COLLATION 
from information_schema.`TABLES` 
where table_name in ('gen_table','tables');

MySQL Unknown error 1267
还真是如此,那么这2种排序规则有何区别?
1、utf8_unicode_ci和utf8_general_ci对中、英文来说没有实质的差别。
2、utf8_general_ci 校对速度快,但准确度稍差。
3、utf8_unicode_ci 准确度高,但校对速度稍慢。

3.解决问题

这里提供几种解决方案,大家根据自身情况选择即可:

3.1 删库重建

这里适合库无所谓的情况,哈哈:
注意如果使用navicat创建数据库的时候记得选择正确的字符集和排序规则:
MySQL Unknown error 1267

3.2 改变数据库的排序规则

直接执行以下语句即可:

ALTER DATABASE 数据库名称 CHARACTER SET utf8 COLLATE utf8_general_ci;

3.3 改变表的排序规则

ALTER TABLE 表名称 CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;

4.总结

遇到问题要不断分析、总结,这样才能融会贯通不断提高。

返回顶部
顶部