MySQL Unknown error 1267
1.问题说明
最近在mysql中运行一段SQL直接报错:
有一点要说一下,这个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');
还真是如此,那么这2种排序规则有何区别?
1、utf8_unicode_ci和utf8_general_ci对中、英文来说没有实质的差别。
2、utf8_general_ci 校对速度快,但准确度稍差。
3、utf8_unicode_ci 准确度高,但校对速度稍慢。
3.解决问题
这里提供几种解决方案,大家根据自身情况选择即可:
3.1 删库重建
这里适合库无所谓的情况,哈哈:
注意如果使用navicat创建数据库的时候记得选择正确的字符集和排序规则:
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.总结
遇到问题要不断分析、总结,这样才能融会贯通不断提高。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 张高兴的大模型开发实战:(一)使用 Selenium 进行网页爬虫
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构