mysql - 如何解决 MySQL 错误字符串值错误?

标签 mysql python-3.x

我正在尝试使用 MySQL 来存储一系列矩阵和字典。 我正在使用 python 3。

为此,我使用 .dumps() 序列化矩阵,并将字典放入 np.arrays 中并序列化它们。

这就是我正在尝试的:

matriz_entry = serie.pvalue_matrix.dumps()
sinais_entry = np.array([serie.sinais]).dumps()

c.execute('INSERT INTO test_table (time, sinais, matriz) VALUES (%s,%s,%s)',
            (time.time(), sinais_entry, matriz_entry))

返回此错误:`pymysql.err.InternalError:(1366,“第 1 行的列 'sinais' 的字符串值不正确:'\x80\x02cnum...'”)

这是我的 MySQL 表:

mysql> DESC test_table;
+--------+----------------+------+-----+---------+-------+
| Field  | Type           | Null | Key | Default | Extra |
+--------+----------------+------+-----+---------+-------+
| time   | varchar(100)   | YES  |     | NULL    |       |
| sinais | varchar(13000) | YES  |     | NULL    |       |
| matriz | varchar(2000)  | YES  |     | NULL    |       |
+--------+----------------+------+-----+---------+-------+
3 rows in set (0.00 sec)

我实际上是 SQL 新手,我不知道序列化对象是否是一个好习惯,因为我可能会超过表的最大行长度(序列化的字典长度超过 12000 个字符)。

我也尝试过使用 TEXT 类型而不是 VARCHAR(),但这也行不通。

请索取任何相关的附加信息。

最佳答案

dumps() 方法生成的数据是二进制数据,由于您尝试以文本格式存储二进制数据,因此会出现错误。

BLOB 用于存储二进制数据,而 Text 用于存储大字符串。

BLOB 值被视为二进制字符串(字节字符串)。它们没有字符集,排序和比较基于列值中字节的数值。

TEXT 值被视为非二进制字符串(字符串)。它们具有字符集,并且根据字符集的排序规则对值进行排序和比较。

您还应该查看this回答如何在数据库中存储泡菜。

关于mysql - 如何解决 MySQL 错误字符串值错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57126962/

相关文章:

python - 将 ☺ 编码为 IBM-437 失败,而 é 等其他有效字符成功

python - os.path.exists() 在 Windows 上的 %appdata% 中给出误报

mysql - 安排导出到文本文件

php - 无法在服务器上保存文件

mysql - 结合MySQL数据库

mysql - 近1000条记录对比查询

python-3.x - 基于趋势值的数据操纵

python - 使用动态命名导出多个 csv 文件

python-3.x - 使用 Gensim 进行动态主题建模/哪个代码?

mysql - SQL Select/Join语句-没有Join时选择?