MySQL 5.7.12 导入无法从字符集“二进制”的字符串创建 JSON 值

作者:编程家 分类: js 时间:2025-12-27

MySQL 5.7.12 导入无法从字符集“二进制”的字符串创建 JSON 值

MySQL是一个广泛使用的关系型数据库管理系统,而JSON(JavaScript Object Notation)是一种常用的数据交换格式。然而,在MySQL 5.7.12版本中,存在一个问题,即无法从字符集为“二进制”的字符串中创建JSON值。这个问题可能导致在导入数据时出现错误,使得无法正确处理JSON格式的数据。

案例代码:

假设我们有一个名为`users`的表,其中包含一个名为`info`的JSON字段。我们尝试向该字段中导入一个二进制字符串,然后将其转换为JSON值。以下是一个示例代码:

sql

CREATE TABLE users (

id INT PRIMARY KEY,

info JSON

);

INSERT INTO users (id, info)

VALUES (1, CONVERT(BINARY '{

"name": "John",

"age": 30

}'));

在上述示例中,我们使用`CONVERT`函数将二进制字符串转换为JSON值,并将其插入到`info`字段中。

然而,如果我们在MySQL 5.7.12版本中运行上述代码,可能会遇到以下错误消息:

Error Code: 3140. Invalid JSON text in argument 2 to function convert_from_json() ... for column 'info' at row 1

这个错误消息提示我们,由于无法从字符集为“二进制”的字符串中创建JSON值,导致无法正确处理这个字段。

解决问题

为了解决这个问题,我们可以通过将二进制字符串先转换为十六进制字符串,然后再将其转换为JSON值来规避此错误。以下是一个修改后的示例代码:

sql

CREATE TABLE users (

id INT PRIMARY KEY,

info JSON

);

INSERT INTO users (id, info)

VALUES (1, CONVERT(FROM_BASE64('eyJub21lIjogIkpvaG4iLCAiYWdlIjogMzB9'), CHAR));

在上述示例中,我们使用`FROM_BASE64`函数将二进制字符串转换为十六进制字符串,然后将其插入到`info`字段中。

通过这种方式,我们可以成功地将二进制字符串转换为JSON值,并将其导入到MySQL 5.7.12版本的表中。

MySQL 5.7.12版本存在一个问题,即无法从字符集为“二进制”的字符串中创建JSON值。这可能导致在导入数据时出现错误,使得无法正确处理JSON格式的数据。然而,通过先将二进制字符串转换为十六进制字符串,然后再将其转换为JSON值,可以规避此问题。这种解决方法可以确保在MySQL 5.7.12版本中正确处理JSON格式的数据。

参考文献:

- MySQL官方文档:https://dev.mysql.com/doc/refman/5.7/en/json.html