mysql - 使用 Python 2.7 和 MySQLdb 将二进制数据插入 MySQL 中的 blob 列时如何避免编码警告

标签 mysql python-2.7 character-encoding blob

我在使用 Python 2.7 中的 MySQLdb 将二进制数据插入 MySQL 中的 longblob 列时遇到问题,但收到一条编码警告,但我不知道如何解决:

./test.py:11: Warning: Invalid utf8 character string: '8B0800'
  curs.execute(sql, (blob,))

这是表定义:

CREATE TABLE test_table (
  id int(11) NOT NULL AUTO_INCREMENT,
  gzipped longblob,
  PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

测试代码:

#!/usr/bin/env python

import sys
import MySQLdb

blob = open("/tmp/some-file.gz", "rb").read()
sql = "INSERT INTO test_table (gzipped) VALUES (%s)"

conn = MySQLdb.connect(db="unprocessed", user="some_user", passwd="some_pass", charset="utf8", use_unicode=True)
curs = conn.cursor()
curs.execute(sql, (blob,))

我在这里和其他地方搜索了答案,但不幸的是,尽管许多问题似乎正是我正在寻找的问题,但海报似乎没有编码问题。

问题:

  1. 是什么原因导致此警告?
  2. 如何摆脱它?

最佳答案

经过更多搜索,我找到了答案。

  1. 实际上是 MySQL 生成了此警告。
  2. 可以通过在二进制参数前使用 _binary 来避免这种情况。

https://bugs.mysql.com/bug.php?id=79317

因此Python代码需要更新如下:

sql = "INSERT INTO test_table (gzipped) VALUES (_binary %s)"

关于mysql - 使用 Python 2.7 和 MySQLdb 将二进制数据插入 MySQL 中的 blob 列时如何避免编码警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55192861/

相关文章:

mysql - 使用mysql将缺少的记录从一个表插入到另一个表

mysql - 如何通过函数方法替换mysql上任何查询中的特殊字符?

php - 无法将新用户插入 mysql 数据库

python - 使用 print 函数在 Python 中打印一个没有 ' or "的句子

python - python 中的字符串比较

Mysql 三表连接同时连接一列?

python - 在Python中使用BeautifulSoup处理网页时,如何通过**class**或**div id**值过滤href链接?

python - 如何使用 python 2.7 中的 os.popen() 或 os.system() 方法执行 Winscp 命令?

java - Java中String的字符编码是什么?

mysql - MySQL 中的字符集服务器 VS 默认字符集