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

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支持的排序规则,导致报错。

解决方案步骤


  1. 确认本地MariaDB的排序规则支持
    登录本地MariaDB,执行以下命令查看支持的utf8mb4排序规则:
SHOW COLLATION LIKE 'utf8mb4%';

输出中没有utf8mb4_0900_ai_ci是正常现象,因为MariaDB不兼容该规则。

  1. 重新导出生产库(修正参数)
    你之前的导出参数存在笔误(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
  1. 重新创建本地库并导入
    先手动创建指定字符集和排序规则的数据库,再导入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
  1. 修改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}")
  1. 检查并修正表级排序规则(可选)
    如果仍有问题,检查所有表的排序规则:
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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 17:52:47