用python检测字符串是否会导致mysql中的“字符串值不正确”错误

czq61nw1  于 2021-06-20  发布在  Mysql
关注(0)|答案(1)|浏览(301)

我在mysql(5.7)数据库中有一个表,它有排序规则utf8\u unicode\u ci,我正在用python(3.6)插入一些数据。
对于某些字符串(例如,'\xce\xa6'),我得到了“不正确的字符串值”错误。在数据库方面,我可以通过关闭mysql中的严格模式,或者将字段的排序规则更改为utf8mb4来消除这个错误。
但是,这样的字符串是“异常”,因此不希望更改排序规则或sqlu模式。
在python3中,在插入表之前,如何检测给定的字符串将导致mysql出现“错误的字符串值”错误?

jw5wzhpr

jw5wzhpr1#

你从哪里得到错误信息?正在进行什么手术? C3A6 utf-8(cf mysql的utf8或utf8mb4)十六进制 æ ; 你觉得那是你想要的角色吗?
要处理utf8(或utf8mb4),需要确定客户机的编码。听起来像utf-8。因此,当连接到mysql时,告诉它--在connect调用中使用以下命令:

charset="utf8", use_unicode=True

如果字符在python源代码中,则需要


# -*- coding: utf-8 -*-

在源头的开始。
您要插入的列也需要 CHARACTER SET utf8 (或utf8mb4)。 utf8mb4 是表情符号和一些汉字所需要的;否则就等于 utf8 .
不要使用 decode() 或任何其他转换函数;那只会让事情更难解决。在这个舞台上,两个错误不等于一个正确;这会把事情搞得更糟。
如果您有其他乱码的症状,请参阅utf-8字符的故障;我看到的不是我储存的
为了进一步讨论,请提供连接调用,所涉及的sql语句, SHOW CREATE TABLE ,以及其他相关内容。 C3A6 是有效的utf8/utf8mb4字符 æ ,并可能被解释为有效,但不太可能,拉丁1 æ . 但这是无效的 CHARACTER SET ascii . (我不知道错误消息是怎么发生的,除非连接说的是ascii或一些模糊的字符集。)

相关问题