我正在使用SQLAlchemy和MySQL,带有一个files
表来存储文件.该表定义如下:
mysql> show full columns in files; +---------+--------------+-----------------+------+-----+---------+-------+---------------------------------+---------+ | Field | Type | Collation | Null | Key | Default | Extra | Privileges | Comment | +---------+--------------+-----------------+------+-----+---------+-------+---------------------------------+---------+ | id | varchar(32) | utf8_general_ci | NO | PRI | NULL | | select,insert,update,references | | | created | datetime | NULL | YES | | NULL | | select,insert,update,references | | | updated | datetime | NULL | YES | | NULL | | select,insert,update,references | | | content | mediumblob | NULL | YES | | NULL | | select,insert,update,references | | | name | varchar(500) | utf8_general_ci | YES | | NULL | | select,insert,update,references | | +---------+--------------+-----------------+------+-----+---------+-------+---------------------------------+---------+
类型的内容列MEDIUMBLOB
是存储文件的位置.在SQLAlchemy中,该列声明为:
__maxsize__ = 12582912 # 12MiB content = Column(LargeBinary(length=__maxsize__))
我不太确定SQLAlchemy的BINARY
类型和LargeBinary
类型之间的区别.或者MySQL的VARBINARY
类型和BLOB
类型之间的区别.而且我不太确定这是否重要.
问题:每当我在该表中存储一个实际的二进制文件,即Python bytes
或b''
对象时,我会得到以下警告
.../python3.4/site-packages/sqlalchemy/engine/default.py:451: Warning: Invalid utf8 character string: 'BCB121' cursor.execute(statement, parameters)
我不想只是忽略警告,但似乎文件是完整的.如何优雅地处理此警告,如何解决其原因?
旁注: 这个问题似乎是相关的,它似乎是一个MySQL错误,它试图将所有传入的数据转换为UTF-8(这个答案).