加入收藏 | 设为首页 | 会员中心 | 我要投稿 源码门户网 (https://www.92codes.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

mysql排序 MYSQL因为排序规则不同导致的问题的解决办法

发布时间:2022-10-22 14:02:43 所属栏目:MySql教程 来源:网络
导读: 之前不知道为什么,项目的数据库中的表虽然都是utf8的字符编码,但排序规则有utf8_bin/utf8_unicode_ci/utf8_general_ci这3种,导致时不时会出现:
[Err] 1267 - Illegal mix of collation

之前不知道为什么,项目的数据库中的表虽然都是utf8的字符编码,但排序规则有utf8_bin/utf8_unicode_ci/utf8_general_ci这3种,导致时不时会出现:

[Err] 1267 - Illegal mix of collations (utf8_general_ci,IMPLICIT) and (utf8_unicode_ci,IMPLICIT) for operation '='这种错误,意思是对于‘=’这种操作非法使用了混合的排序规则,即sql语句中‘=’左边和右边的列使用的排序规则是不一样的,因为涉及的表多,不可能一个一个改,网上有种用select语句生成脚本然后执行脚本的方法可以对多个表中普通的字段进行排序规则的修改,但当一个表的id是另一个表的外键时,就不能修改此Id列的排序规则了,脚本也就一样会报错不能使用了,手动去一个一个修改也是同样不行的,下面记录我的一种比较笨的解决办法,目前完美解决我的问题,如果有更好的办法,希望各大神在评论中讲一讲。我用的可视化工具是navicat,就以此为基础开始操作:

1.在当前数据上右键“导出数据和结构”,将数据库导出到.sql文件中;

2.使用文本编辑器(我的是notepad++)打开此文件,搜索‘utf8_bin’全部替换为'utf8_general_ci',搜索'utf8_unicode_ci'全部替换为‘utf8_general_ci’;

3.保存编辑;

4.删除原数据库;

5.新建一个同名数据库,设置编码为‘utf-8’,排序规则为‘utf8_general_ci’;

6.选择此数据库运行sql文件;

至此所有步骤完成,需要说明的是使用Hibernate自动建表时表的编码和排序规则会继承数据库的编码和排序规则,列的编码和排序规则又会继承表的编码和排序规则,故第5步中如果将排序规则设为‘utf8_general_ci’会导致运行的sql文件中如果有的表没有显示指定编码或排序规则就会使用数据库的编码或排序规则,以及以后新建的表会使用数据库的编码和 排序规则又会导致排序规则不一致的问题,故第5步和你在sql文件中替换的排序规则必须一致。

另外需要注意的是,如果存在存储过程和视图,导入时可能会报语法错误,这不是sql文件的问题mysql排序,可能是navicat的问题或者MySQL的问题,解决办法为:

mysql 根据条件排序_mysql排序_mysql 查询 按时间排序

1.打开sql文件,将sql文件中创建存储过程和创建视图的语句剪切到一个txt文本文件中;

2.保存sql文件,此时sql文件中只有创建表和插入数据的sql语句;

3.选择数据库导入此sql文件,此时应该就能成功导入不会报错;

4.创建一个查询,将txt文件中的内容复制到查询中,执行查询,此时应该就可以成功创建视图以及存储过程并且不会报错了。

完。

(编辑:源码门户网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!