在Python调用存储过程时出现错误的字符串值警告

4 投票
1 回答
3800 浏览
提问于 2025-04-17 15:55

我有一个数据库,里面有一个存储过程,我在我的Python脚本中调用它。
直到昨天,一切都没有问题。
但是昨天我的数据库服务器出了点问题,数据库被恢复了。
现在我在用同样的代码时收到了这个警告:

Warning: Incorrect string value: '\xD9\x88\xD8\xB2\xDB\x8C...' for column 'title' at row 1

我检查了一些数据库中的编码:
INFORMATION_SCHEMA.COLUMNS 中:

+--------------+--------------------+
| COLUMN_NAME  | CHARACTER_SET_NAME |
+--------------+--------------------+
| title        | utf8               |
+--------------+--------------------+

数据库排序规则: latin1_swedish_ci
表排序规则: utf8_general_ci
列排序规则: utf8_general_ci
服务器字符集: UTF-8 Unicode (utf8)
(这些都和之前一样!!)

我用这个连接数据库:

self.con=mdb.connect(host=self.host, user=self.user, passwd=self.passwd, db=self.dbname,use_unicode=True, charset="utf8");

而变量 title 是Unicode格式的。

我尝试了:

  • 修改表格,重新设置 title 列为 utf8_general_ci
  • 在调用存储过程之前执行 SET NAMES utf8
  • 删除并重新创建存储过程

但都没有用!!! :-(


我在一个临时表上执行了一个 insert 查询,内容是Unicode格式的,结果没有出现那个警告!!!


那到底是什么问题呢?
我该怎么解决这个问题?

谢谢

1 个回答

10

问题解决了!
我在我的存储过程的VARCHAR参数中添加了 CHARACTER SET utf8,问题就解决了:

..., IN `title` VARCHAR(255) CHARSET utf8,...

不过我还是想知道,为什么在恢复数据库之前没有问题呢!!!?

撰写回答