SuperAPI AI 工具集

mariadb-errors-encoding-and-collation

编程与开发

查看项目

更新于 10-15 22:18

技能介绍

用途:诊断并修复 MariaDB 的字符集与排序规则(collation)问题,包括 emoji 或 Unicode 字符存不进去、JOIN 出现“Illegal mix of collations”错误、转换字符集时的索引长度风险、连接字符集不匹配导致乱码等。

主要能力与要点:MariaDB 中 utf8 是 utf8mb3 的别名,每字符最多 3 字节,无法存储 emoji 及 U+FFFF 以上的码点,应使用 utf8mb4。错误 1267 表示比较或 JOIN 两侧字符集排序规则不兼容,可用 COLLATE 子句临时修复,或将列改为同一排序规则永久修复。utf8mb4_uca1400_ai_ci 是 MariaDB 11.5+ 的默认排序规则,11.5 之前为 utf8mb4_general_ci,混用会触发 1267。ALTER TABLE ... CONVERT TO CHARACTER SET utf8mb4 会重写所有行,可能使索引列超过 COMPACT 行格式的 767 字节前缀限制(错误 1071),转换前应先设 ROW_FORMAT=DYNAMIC(上限 3072 字节)。用 SET NAMES utf8mb4 设置连接字符集;插入报错 1366 表示 4 字节字符发往了 utf8mb3 或 latin1 列。不要用 _bin 排序规则做不区分大小写的搜索。

使用方式:按错误号定位问题,运行 SET NAMES utf8mb4,在 DDL 中显式写 utf8mb4,用信息模式查询审计非 utf8mb4 列;mariadb-dump 导出与恢复均需加 --default-character-set=utf8mb4。

适用场景与限制:适用于 MariaDB 字符集迁移与排错。本技能不涵盖新表模式设计、MySQL 到 MariaDB 完整迁移、JSON 语法与函数、备份恢复工具等主题。具体版本行为与引用文档细节以官方资料为准。