【问题标题】:Incorrect String Value MySQL & Python for 3 Byte characters3 字节字符的字符串值 MySQL 和 Python 不正确
【发布时间】:2017-08-04 15:19:07
【问题描述】:

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

我的问题是我试图在 utf8 中存储一个 3 字节字符,而不是像许多问题提出的那样存储 4 个字节,特别是中文字符。

DB 字符集是带有 utf8_general_ci 排序规则的 utf8。列、表和连接字符集也是 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') 也不能解决问题。

【问题讨论】:

    标签: python mysql utf-8


    【解决方案1】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2014-03-17
      • 2012-09-20
      • 1970-01-01
      • 2011-09-13
      • 2020-02-20
      • 2012-11-08
      • 2017-06-09
      • 1970-01-01
      • 2020-11-19
      相关资源
      最近更新 更多