首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用Python检测字符串是否会导致MySQL中的“不正确的字符串值”错误

问用Python检测字符串是否会导致MySQL中的“不正确的字符串值”错误
EN

Stack Overflow用户
提问于 2018-06-03 13:43:23
回答 1查看 362关注 0票数 1

我在MySQL (5.7)数据库中有一个表,它有排序规则MySQL,我在那里使用Python3.6插入一些数据。

对于某些字符串(例如'\xCE\xA6'),我得到“不正确的字符串值”错误。在DB方面,我可以通过关闭MySQL中的严格模式或将字段的排序规则更改为utf8mb4来消除此错误。

但是,这样的字符串是“异常”的,因此更改排序规则或sql_mode是不可取的。

如何在Python3中检测到,在插入表之前,给定的字符串将导致MySQL出现“不正确的字符串值”错误?

EN

回答 1

Stack Overflow用户

发布于 2018-06-04 01:08:12

您从哪里得到错误消息?正在执行什么手术?

C3A6是用于æ的UTF-8 (cf的utf8或utf8mb4)十六进制;这是否有可能是所需的字符?

要处理utf8 (或utf8mb4),您需要确定客户端的编码。听起来像是八号。所以,当连接到MySQL时,告诉它--在连接调用中使用这些:

代码语言:javascript
复制
charset="utf8", use_unicode=True

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

代码语言:javascript
复制
# -*- 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或某个晦涩的字符集。)

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50667041

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档