2017-08-04 85 views
0

在开始之前,我知道这个问题非常重要,但我几乎查看了所有符合与此问题相关的各种搜索术语的SO问题。不正确的字符串值MySQL和Python的3字节字符

我的问题是,我试图存储一个3字节的字符在utf8中,而不是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

这导致在这一领域中选择,导致?。我的终端支持utf8,以及我的系统编码是utf8。

任何想法都会有帮助。在这个值上调用.decode('utf8')也不能解决问题。

回答

1

原来这是存储过程的一个问题。从MYSQL文档。

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

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

TLDR;将CHARSET utf8添加到您的存储过程参数。