我正在尝试使用 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/