排序规则非法混合

排序规则非法混合

问题出现场景

环境:

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的最新分区信息,答案是没有的,只有一条建表时的分区信息。
修改前

调用修改后的存储过程创建一条分区,创建成功,已多出一条分区信息。
修改后

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值