不正确的字符串值MySQL& Python为3字节字符

时间:2017-08-04 15:19:08

标签: python mysql utf-8

在开始之前,我知道这个问题很受欢迎,但我已经查看了几乎所有适合与此问题相关的搜索字词的SO问题。

我的问题是我试图在utf8中存储3字节字符,而不是4个字节,因为很多问题,特别是中文字符。

DB字符集是utf8,带有utf8_general_ci排序规则。列,表和连接字符集也是utf8。

MySQLdb.connect(host, user, passwd, schema, charset ='utf8', use_unicode=True)

我知道use_unicode是隐含的,但我喜欢冗长。

我收到的警告是:Warning: Incorrect string value: '\xE5\x9B\xBD' for column 'mycolumn' at row 1

这会导致该字段的SELECTS,从而产生?。我的终端支持utf8,我的系统编码是utf8。

任何想法都会有所帮助。在此值上调用.decode('utf8')也无法解决问题。

1 个答案:

答案 0 :(得分:1)

事实证明这最终成为存储过程的问题。来自MYSQL文档。

  

如果CHARACTER SET和COLLATE属性不存在,则使用在例程创建时生效的数据库字符集和排序规则。为避免服务器使用数据库字符集和排序规则,请为字符数据参数提供显式CHARACTER SET和COLLATE属性。

连接和客户端编码是UTF8,但数据库仍然是latin1。这导致了问题,因为存储过程是在DB编码为latin1时创建的。

<强> TLDR;将CHARSET utf8添加到存储过程参数中。