Python + Sqlite3 转储,MariaDB 源:未知排序规则:'utf8mb4_0900_ai_ci'(db noob)

问题描述 投票:0回答:1

我正在关注 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               |
+--------------------------+-------------------------------+

所以我猜数据存在字符集或编码问题(?)。

此时我迷失了方向,疯狂地在互联网上寻找线索。感谢任何帮助,并对长篇文章表示歉意:)

python sql sqlite mariadb
1个回答
0
投票

MySQL 连接器似乎强制使用 MariaDB 中不存在的排序规则 (

utf8mb4_0900_ai_ci
)。

根据评论,尝试在连接上强制执行稍后的 MariaDB 排序规则

utf8mb4_uca1400_ai_ci
似乎无法解析连接。

MariaDB Connector/Python 它实际上是使用 MariaDB 服务器进行测试的。符合 Python 数据库 API 规范 v2.0 (PEP 249) 它应该与 MySQL (Python) 连接器兼容,作为 MariaDB 服务器和应用程序的替代连接模块。

© www.soinside.com 2019 - 2024. All rights reserved.