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

将SQLite3迁移至MariaDB时遇未知排序规则错误求助

解决MariaDB未知排序规则utf8mb4_0900_ai_ci错误

问题根源

utf8mb4_0900_ai_ci是MySQL 8.0专属的排序规则,MariaDB 11.4默认使用utf8mb4_uca1400_ai_ci(或其他兼容规则),两者不兼容,导致Python连接时触发未知排序规则错误。

解决方案

1. 修正Python数据库连接参数

检查你的Python代码中mysql.connector的连接配置,确保没有指定MariaDB不支持的排序规则:

import mysql.connector

# 正确的连接配置示例
cnx = mysql.connector.connect(
    user='swimuser',
    password='your_password',
    host='localhost',
    database='swimDB',
    charset='utf8mb4',
    # 使用MariaDB支持的排序规则,或省略让它继承数据库默认值
    collation='utf8mb4_uca1400_ai_ci'
)

如果之前显式设置了collation='utf8mb4_0900_ai_ci',直接替换为MariaDB支持的规则即可。

2. 检查并修正导入的SQL文件

打开导出的schema.sql,全局搜索utf8mb4_0900_ai_ci,将所有匹配项替换为MariaDB支持的排序规则(比如utf8mb4_uca1400_ai_ci或utf8mb4_unicode_520_ci)。完成后重新导入:

mariadb -u swimuser -p swimDB < schema.sql
mariadb -u swimuser -p swimDB < data.sql

3. 统一MariaDB连接字符集配置

从你的变量查询结果看,客户端/连接/结果字符集为utf8mb3,可能导致连接时字符集不匹配。修改MariaDB配置文件(比如/etc/mysql/mariadb.conf.d/50-server.cnf或/etc/my.cnf):

[client]
default-character-set = utf8mb4

[mysql]
default-character-set = utf8mb4

[mysqld]
character-set-server = utf8mb4
collation-server = utf8mb4_uca1400_ai_ci

修改后重启MariaDB服务:

sudo systemctl restart mariadb

4. 确认并修正表的排序规则

执行以下SQL语句,检查swimDB中所有表的排序规则:

SELECT table_name, table_collation 
FROM information_schema.tables 
WHERE table_schema = 'swimDB';

如果发现有表使用utf8mb4_0900_ai_ci,执行ALTER语句修正:

ALTER TABLE swimmers CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_uca1400_ai_ci;
ALTER TABLE events CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_uca1400_ai_ci;
ALTER TABLE times CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_uca1400_ai_ci;

内容的提问来源于stack exchange,提问作者CraigFoote

相关产品推荐
方舟 Agent Plan

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

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