在开始之前,我知道这个问题很受欢迎,但我已经查看了几乎所有适合与此问题相关的搜索字词的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')
也无法解决问题。
答案 0 :(得分:1)
事实证明这最终成为存储过程的问题。来自MYSQL文档。
如果CHARACTER SET和COLLATE属性不存在,则使用在例程创建时生效的数据库字符集和排序规则。为避免服务器使用数据库字符集和排序规则,请为字符数据参数提供显式CHARACTER SET和COLLATE属性。
连接和客户端编码是UTF8,但数据库仍然是latin1。这导致了问题,因为存储过程是在DB编码为latin1时创建的。
<强> TLDR;将CHARSET utf8
添加到存储过程参数中。