我正在关注 Head First Python (3ed)。我已经读到最后一章了,有一个无法克服的错误。
我有一个 sqlite3 数据库,需要将其移植到 MariaDB。我将架构和数据放在单独的文件中:
sqlite3 CoachDB.sqlite3 .schema > schema.sql
sqlite3 CoachDB.sqlite3 '.dump swimmers events times --data-only' > data.sql
我已经通过 apt 安装了 MariaDB,向用户授予了权限,并登录以获取 MariaDB 提示:
mariadb -u swimuser -p swimDB
source schema.sql;
source data.sql;
现在我在本地运行连接到 MariaDB 的 python 应用程序,但是,我不确定调用到底在哪里,调用失败了:
mysql.connector.errors.DatabaseError:1273(HY000):未知排序规则:'utf8mb4_0900_ai_ci'
返回 MariaDB 提示符:
show collation like 'utf8%';
# 显示没有排序规则 'utf8mb4_0900_ai_ci'
select * from INFORMATION_SCHEMA.SCHEMATA;
# 显示默认为 utf8mb4 / utf8mb4_uca1400_ai_ci
在 shell 提示符下,
file -i schema.sql
显示它是 us-ascii 格式的纯文本。我尝试在notepadqq中打开schema.sql和data.sql并将它们保存为utf8,但我仍然遇到同样的错误。我删除了数据库并重新创建了它:
CREATE DATABASE swimDB
DEFAULT CHARACTER SET utf8mb4
DEFAULT COLLATE utf8mb4_unicode_520_ci;
...然后再次获取 schema.sql 和 data.sql,仍然遇到相同的错误。
我看到一个帖子有人问这个所以...
MariaDB [swimDB]> SHOW VARIABLES WHERE VALUE LIKE 'utf%';
+--------------------------+-------------------------------+
| Variable_name | Value |
+--------------------------+-------------------------------+
| character_set_client | utf8mb3 |
| character_set_collations | utf8mb4=utf8mb4_uca1400_ai_ci |
| character_set_connection | utf8mb3 |
| character_set_database | utf8mb4 |
| character_set_results | utf8mb3 |
| character_set_server | utf8mb4 |
| character_set_system | utf8mb3 |
| collation_connection | utf8mb3_general_ci |
| collation_database | utf8mb4_uca1400_ai_ci |
| collation_server | utf8mb4_uca1400_ai_ci |
| old_mode | UTF8_IS_UTF8MB3 |
+--------------------------+-------------------------------+
所以我猜数据存在字符集或编码问题(?)。
此时我迷失了方向,疯狂地在互联网上寻找线索。感谢任何帮助,并对长篇文章表示歉意:)
MySQL 连接器似乎强制使用 MariaDB 中不存在的排序规则 (
utf8mb4_0900_ai_ci
)。
根据评论,尝试在连接上强制执行稍后的 MariaDB 排序规则
utf8mb4_uca1400_ai_ci
似乎无法解析连接。
MariaDB Connector/Python 它实际上是使用 MariaDB 服务器进行测试的。符合 Python 数据库 API 规范 v2.0 (PEP 249) 它应该与 MySQL (Python) 连接器兼容,作为 MariaDB 服务器和应用程序的替代连接模块。