我在MySQL (5.7)数据库中有一个表,它有排序规则MySQL,我在那里使用Python3.6插入一些数据。
对于某些字符串(例如'\xCE\xA6'),我得到“不正确的字符串值”错误。在DB方面,我可以通过关闭MySQL中的严格模式或将字段的排序规则更改为utf8mb4来消除此错误。
但是,这样的字符串是“异常”的,因此更改排序规则或sql_mode是不可取的。
如何在Python3中检测到,在插入表之前,给定的字符串将导致MySQL出现“不正确的字符串值”错误?
发布于 2018-06-04 01:08:12
您从哪里得到错误消息?正在执行什么手术?
C3A6是用于æ的UTF-8 (cf的utf8或utf8mb4)十六进制;这是否有可能是所需的字符?
要处理utf8 (或utf8mb4),您需要确定客户端的编码。听起来像是八号。所以,当连接到MySQL时,告诉它--在连接调用中使用这些:
charset="utf8", use_unicode=True如果字符位于python源代码中,则需要
# -*- coding: utf-8 -*-在源头的开头。
您要插入的列也需要是CHARACTER SET utf8 (或utf8mb4)。
Emoji和一些中国人需要utf8mb4,否则它就相当于utf8。
不要使用decode()或任何其他转换函数;这只会使事情更难修复。在这个舞台上,两个错误并不代表正确,而是更糟糕的混乱。
如果您有其他混淆字符的症状,请参阅Trouble with UTF-8 characters; what I see is not what I stored。
为了进一步讨论,请提供连接调用、所涉及的SQL语句、SHOW CREATE TABLE和任何涉及的其他内容。
C3A6是一个有效的utf8 8/utf8mb4字符æ,可以被解释为有效的(虽然不太可能) latin1 æ。但是它对CHARACTER SET ascii是无效的。(我不知道错误消息是如何发生的,除非连接上写着ascii或某个晦涩的字符集。)
https://stackoverflow.com/questions/50667041
复制相似问题