上下文:我通过Python和mysql.connector模块将查询发送到我的mysql.connector服务器(VER15.1 Demode10.3.34-MariaDB)。(我不知道它在我的列表中是哪一个:mysql-连接器2.2.9 mysql-连接器-python 8.0.29 mysql-连接器-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.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 )我会非常感谢任何能帮助修复这个问题的事情。我通常知道我能在寻找几个小时后找到一个解决方案,但在这里我觉得我永远无法解决它。
发布于 2022-07-23 01:32:11
我找到了解决办法。在创建游标之后,我必须调用以下函数:
cursor.execute('SET NAMES utf8mb4')
cursor.execute("SET CHARACTER SET utf8mb4")
cursor.execute("SET character_set_connection=utf8mb4")这很奇怪,因为我认为这些都是通过我在/etc/mysql/my.cnf中添加的内容完成的,但显然不是吗?不管怎么说。我很高兴
它说我只能在两天内把这个作为接受的答案加起来,然后再加。
https://dba.stackexchange.com/questions/314755
复制相似问题