从 python 连接到 MariaDB 时出错:未知排序规则:'utf8mb4_0900_ai_ci'

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

在我的生产服务器(Debian 12)上,我有一个 mariadb 数据库“sasquatch_index”,它可以按预期使用一些与其交互的 python 脚本。我正在设置我的应用程序以在测试环境中工作,我想将此数据库复制到我的本地系统(Manjaro)。在我的生产服务器上,我使用类似

mariadb-dump -u [username] -p[password] sasquatch_index > ./site_dump.sql
的命令来创建 site_dump.sql 文件。我然后使用 rsync 从本地计算机检索此文件。我使用
mariadb -u [user] -p sasquatch_index < ~/site_dump.sql
在本地计算机上启动数据库。我可以通过 mariadb 客户端访问该数据库及其内容。到目前为止一切顺利。

然而,当我尝试使用任何现有的 python 脚本与本地计算机(我正在设置的测试环境)上的该数据库进行交互时,就会出现问题。所述脚本使用通过命令

pacman -S python-mysql-connector
安装的“mysql.connector”模块。例如,search.py 的存在是为了对数据库执行复杂的搜索。它通过像
search.py -s "hello world"
这样的命令运行,并返回如下错误输出:

Error connecting to database: 1273 (HY000): Unknown collation: 'utf8mb4_0900_ai_ci'
Traceback (most recent call last):
  File "/home/josh/git/github/search-sasquatch/./search.py", line 270, in <module>
    main()
  File "/home/josh/git/github/search-sasquatch/./search.py", line 262, in main
    results = performSearch(arguments['searchString'], arguments['safe'], creds)
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/josh/git/github/search-sasquatch/./search.py", line 185, in performSearch
    if conn is not None and conn.is_connected():
       ^^^^
UnboundLocalError: cannot access local variable 'conn' where it is not associated with a value

(请注意输出中与“未知排序规则”相关的部分。名为“conn”的变量的值取决于是否成功连接到数据库。)

出现“未知排序规则”错误的另一个实例是尝试使用其中另一个 python 脚本时。这个特殊的“extractor.py”将新数据附加到“sasquatch_index”数据库表中名为“sites”的表中。在本地系统上运行此脚本的输出如下所示:

Parsing https://example.com/index.php...
Error updating the database for url 'https://example.com/index.php': 1273 (HY000): Unknown collation: 'utf8mb4_0900_ai_ci'
Parsing https://josh.example.com...
Error updating the database for url 'https://josh.example.com': 1273 (HY000): Unknown collation: 'utf8mb4_0900_ai_ci'

这些脚本在生产环境中按照预期完美运行,但在本地,它们会产生这样的错误。

我尝试修改在生产服务器上运行的命令以明确不使用排序规则“utf8mb4_0900_ai_ci”,即

mariadb-dump --default-character-set=utf8mb --skip-set-charset -u [user] -p[password] sasquatch_index > site_dump.sql

我还在“site_dump.sql”文件中搜索了字符串“utf8mb4_0900_ai_ci”,并发现该文本从未出现在该文件中。一直以来这些错误仍然发生。

最近,我尝试在不导入任何内容的情况下运行“extractor.py”(我使用项目中的其他脚本创建了数据库和表),但我仍然遇到相同的错误。 “extractor.py”仍然无法将任何数据添加到站点表中。

python linux mariadb collation
1个回答
0
投票

@danblack 提出了解决这些问题的建议,即从使用“mysql.connector”库切换到名为“mariadb”的库。有关该库的更多信息可以在此处找到。

但是我想指出,这个库没有“is_connected()”方法。我必须对代码的其他部分进行一些细微的调整才能解决这个问题。除了这个小小的疏忽之外,现在一切都按预期进行。

这个帖子也非常有用。

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