上下文:我通过 Python 脚本和 mysql.connector 模块向我的 MariaDB 服务器(Ver 15.1 Distrib 10.3.34-MariaDB)发送查询。(我不知道它在我列表中的这 3 个中是哪一个: mysql-connector 2.2.9 mysql-connector-python 8.0.29 mysql-connector-python-rf 2.2.2 )
我遇到了第一个问题,例如这个查询:
INSERT INTO messages(message_id, message, user_id, date_sent, channel_sent, stream_sent) VALUES('1c5e6b29-cd11-4a8b-bd20-583f65b4a130', '?', 121797523, FROM_UNIXTIME(1658512097), 24147592, 1539530627)
将返回此错误:
1366 (22007): Incorrect string value: '\xF0\x9F\x99\x83' for column `table_name`.`messages`.`message` at row 1
经过无数小时的寻找,我发现一个帖子说这个功能: conn.set_charset_collation(charset=charset, collation=collation)
应该修复它。因此,在我的 Python 脚本连接到我的数据库并获得我的 conn(用于获取光标的那个)之后,我会这样做
conn.set_charset_collation(charset="utf8mb4", collation="utf8mb4_bin")
现在我收到一条新的错误消息:unknown encoding: utf8mb4
我还发现另一个帖子说要编辑/etc/mysql/my.cnf
,所以我做了,现在看起来如下(但它没有解决问题):
[client]
default-character-set = utf8mb4
[mysql]
default-character-set = utf8mb4
[mysqld]
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
max_connections = 500
character-set-client-handshake = 0
init_connect = 'SET character_set_system = utf8mb4'
init_connect = 'SET character_set_connection = utf8mb4'
init_connect = 'SET character_set_database = utf8mb4'
init_connect = 'SET character_set_results = utf8mb4'
init_connect = 'SET collation_database = utf8mb4_bin'
init_connect = 'SET collation_connection = utf8mb4_bin'
init_connect = 'SET NAMES utf8mb4'
character_set_client = utf8mb4
collation-server = utf8mb4_bin
(我做了systemctl restart mysql
和systemctl restart mariadb
之后)我会非常感谢任何有助于解决这个问题的东西。我通常知道我可以在寻找几个小时后找到解决方案,但在这里我觉得我永远无法修复它
我找到了解决方案。我必须在创建光标后立即调用这些函数:
这很奇怪,因为我认为那些已经通过我添加的内容完成了
/etc/mysql/my.cnf
,但显然不是?反正。我很开心它说我只能在 2 天内将此添加为已接受的答案,然后我会添加它。