MariaDB修改含JSON列的表排序规则:是否影响JSON列及可用性?
MariaDB JSON列排序规则修改问题解答
会不会修改JSON列的排序规则?
会。MariaDB里的JSON类型本质是LONGTEXT COLLATE utf8mb4_bin的别名,当执行ALTER TABLE table CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_520_ci;时,这个操作会统一调整表内所有列的字符集和排序规则——包括JSON列。执行完成后,查看列定义就能发现,JSON列的排序规则已经从默认的utf8mb4_bin变成了utf8mb4_unicode_520_ci。
会不会影响JSON列的可用性?
不会影响核心可用性,具体分析如下:
- JSON列的核心功能(比如
JSON_EXTRACT、JSON_SET这类JSON处理函数)只关心数据的JSON结构,和排序规则无关,这些功能仍能正常工作。 - 排序规则变更只会改变字符串比较的行为(比如原本
utf8mb4_bin是大小写敏感,utf8mb4_unicode_520_ci是大小写不敏感),但不会修改JSON数据本身的存储内容。如果你的业务没有依赖原排序规则做字符串比较逻辑,完全不会有问题;要是有相关依赖,只需要评估比较逻辑的变化是否符合业务预期即可。
如果之后想把JSON列改回默认的utf8mb4_bin排序规则,直接执行ALTER TABLE table MODIFY COLUMN json_column JSON;就行,因为JSON类型的默认排序规则就是utf8mb4_bin,这条语句会重置列的排序规则到默认值。
内容的提问来源于stack exchange,提问作者Alexander Presber
相关产品推荐
相关产品推荐

