Python连接本地MariaDB报错:Unknown collation: 'utf8mb4_0900_ai_ci'
解决MariaDB迁移后Python mysql-connector报Unknown collation: 'utf8mb4_0900_ai_ci'的问题
问题根源
utf8mb4_0900_ai_ci是MySQL 8.0专属的排序规则,MariaDB并不支持该规则(MariaDB使用utf8mb4_unicode_ci/utf8mb4_general_ci等自有规则)。你遇到的问题是:虽然客户端能正常访问数据库,但Python的mysql-connector驱动在连接时尝试使用了不被本地MariaDB支持的排序规则,导致报错。
解决方案步骤
- 确认本地MariaDB的排序规则支持
登录本地MariaDB,执行以下命令查看支持的utf8mb4排序规则:
SHOW COLLATION LIKE 'utf8mb4%';
输出中没有utf8mb4_0900_ai_ci是正常现象,因为MariaDB不兼容该规则。
- 重新导出生产库(修正参数)
你之前的导出参数存在笔误(utf8mb应为utf8mb4),使用以下命令重新导出:
mariadb-dump -u [生产库用户名] -p sasquatch_index \ --default-character-set=utf8mb4 \ --collation=utf8mb4_unicode_ci \ --skip-set-charset > site_dump.sql
如果已经导出过SQL文件,直接用sed替换所有残留的规则:
sed -i 's/utf8mb4_0900_ai_ci/utf8mb4_unicode_ci/g' site_dump.sql
- 重新创建本地库并导入
先手动创建指定字符集和排序规则的数据库,再导入SQL:
-- 登录本地MariaDB执行 DROP DATABASE IF EXISTS sasquatch_index; CREATE DATABASE sasquatch_index CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
导入命令:
mysql -u [本地库用户名] -p sasquatch_index < site_dump.sql
- 修改Python脚本的连接配置
在mysql-connector的连接参数中明确指定兼容的排序规则,避免驱动自动选择不支持的规则:
import mysql.connector db_config = { 'user': '你的本地用户名', 'password': '你的本地密码', 'host': '127.0.0.1', 'database': 'sasquatch_index', 'charset': 'utf8mb4', 'collation': 'utf8mb4_unicode_ci' # 强制指定MariaDB支持的排序规则 } try: conn = mysql.connector.connect(**db_config) # 后续业务操作 except mysql.connector.Error as err: print(f"Error connecting to database: {err}")
- 检查并修正表级排序规则(可选)
如果仍有问题,检查所有表的排序规则:
SELECT table_name, table_collation FROM information_schema.tables WHERE table_schema = 'sasquatch_index';
若存在使用utf8mb4_0900_ai_ci的表,逐个修正:
ALTER TABLE [表名] CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
内容的提问来源于stack exchange,提问作者joshua
相关产品推荐
相关产品推荐

