【问题标题】:How to solve Incorrect string value MySQL error?如何解决 Incorrect string value MySQL 错误?
【发布时间】:2019-07-20 17:16:18
【问题描述】:

我正在尝试使用 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, "Incorrect string value: '\x80\x02cnum...' for column 'sinais' at row 1")

这是我的 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(),但这也不起作用。

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

【问题讨论】:

    标签: mysql python-3.x


    【解决方案1】:

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

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-11-18
      • 2016-08-25
      • 2020-07-02
      • 2018-12-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多