排序规则非法混合
问题出现场景
环境:
mysql8,数据库字符集为utf8 – UTF-8 Unicode,排序规则为utf8_general_ci
需求:
因表中数据过于庞大,运用定时事件调用存储过程对表进行分区操作,结果mysql8出现创建分区失败错误。
表:
存储过程:
当调用该存储过程时就会出错
CALL test.TEST_PROCEDURE(‘test’,‘test_tab’);
错误截图:
问题解决
将错误信息大致翻译了一下,说是排序规则的非法混合造成,也同时在网上找了很多解决方式,也按着那些方式试了一下,结果都是行不通的,但是终究还是给了我一部分启发,我就按照我自己的想法再试了一下,果然可以了,希望这个记录可以成为有缘人的明灯。
步骤一:
通过命令(show full fields from information_schema.partitions)查看分区信息表个字段的基本信息
我所看到的信息中,红框圈中的排序规则都是 utf8_tolower_ci。
步骤二:
重新创建存储过程,并将存储过程中的参数限定字符集和排序规则。
自此,再调用该存储过程,就没有失败了。
检查:
检查分区表中是否有test_tab的最新分区信息,答案是没有的,只有一条建表时的分区信息。
调用修改后的存储过程创建一条分区,创建成功,已多出一条分区信息。