MySQL JSON_TABLE 一个1267错误提示

| 选择喜欢的代码风格  

MySQL 1267 错误


前提:我这里的前提是几个表,字符集均确定是一致的 utf8_general_ci,出现 1267 错误,其他情况如果表之间不一致,可以考虑用 CAST 或者 CONVERT 转换,甚至把 2 个字段转换,二进制 BINARY 方式等。

SQL => 1267 => Illegal mix of collations 
(utf8mb4_general_ci,IMPLICIT) 
and (utf8mb4_0900_ai_ci,IMPLICIT) 
for operation '='

一开始以为是需要显示的声明 JSON_TABLE 里字段的字符集(不同字符集排序不可以混用),用了 CAST,但发现依然还是不行,用 SQLyog 没问题,脚本出这个问题,最后排查是因为连接 SET NAMES 写的有问题,MARK 一下。

在较新版本的 MySQL 中,推荐使用 SET NAMES 的同时,使用 SET CHARSET 以及 SET COLLATION,而不是仅使用 SET NAMES。这可以确保更准确的字符集和排序规则的设置

SET NAMES 'utf8mb4' COLLATE 'utf8mb4_general_ci'

# 不仅仅是 SET NAMES 'utf8mb4'
# 顺便设置连接 charset

注意:使用 JSON_TABLE 函数需要 MySQL 8.0.4 及以上版本的支持。

 

MySQL 1267 错误扩展阅读




发表评论