You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MariaDB存储过程出现排序规则不兼容错误(1267)求助

MariaDB存储过程排序规则冲突问题解决

错误原因

你确认recordid列排序规则为utf8mb4_general_ci,但存储过程的输入参数mytable_id默认继承了会话或数据库的默认排序规则(此处为utf8mb4_unicode_ci),当执行等值比较时,两种不同的排序规则无法兼容,触发1267错误。

解决办法

方法1:参数定义时指定匹配的排序规则

修改存储过程,在参数声明阶段明确设置与recordid列一致的排序规则:

CREATE DEFINER=`User`@`%` PROCEDURE `MYTABLE`(IN mytable_id VARCHAR(36) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci)
BEGIN
    SELECT * FROM mytables WHERE recordid = mytable_id;
END

方法2:查询中转换参数排序规则

若不想修改参数定义,可在WHERE子句中转换参数的排序规则,使其与列匹配:

CREATE DEFINER=`User`@`%` PROCEDURE `MYTABLE`(IN mytable_id VARCHAR(36))
BEGIN
    SELECT * FROM mytables WHERE recordid = CONVERT(mytable_id USING utf8mb4) COLLATE utf8mb4_general_ci;
END

额外建议

  • 执行SHOW VARIABLES LIKE 'collation%';查看当前数据库和会话的默认排序规则,确认参数继承的规则来源。
  • 长期来看,建议统一数据库、表、列的排序规则,避免此类兼容性问题反复出现。

内容的提问来源于stack exchange,提问作者Elcid_91

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 09:42:12