Mysql 5.7 错误 3143 (42000):无效的 JSON 路径表达式。错误发生在字符位置 3 附近

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

MySQL是一种广泛使用的关系型数据库管理系统,而MySQL 5.7是其较新的版本之一。然而,在使用MySQL 5.7时,可能会遇到错误3143 (42000):无效的JSON路径表达式。这个错误通常在字符位置3附近发生,意味着在JSON路径表达式中存在问题。本文将详细介绍这个错误的原因,并提供一个案例代码来帮助读者更好地理解。

错误原因

在MySQL 5.7中,引入了对JSON数据类型的支持,可以在数据库中存储和查询JSON格式的数据。JSON路径表达式是一种用于查询和修改JSON数据的方式。然而,当在JSON路径表达式中存在错误时,MySQL将会返回错误3143。

案例代码

为了更好地说明这个错误,我们提供以下案例代码:

sql

CREATE TABLE students (

id INT PRIMARY KEY,

name VARCHAR(50),

grades JSON

);

INSERT INTO students (id, name, grades)

VALUES (1, 'John', '{"math": 90, "english": 80}'),

(2, 'Jane', '{"math": 95, "english": 85}');

SELECT id, name, grades

FROM students

WHERE JSON_EXTRACT(grades, '$.science') > 80;

在上述代码中,我们创建了一个名为"students"的表,其中包含id、name和grades三个列。grades列的数据类型为JSON,用于存储学生的成绩信息。然后,我们向表中插入了两条学生记录,并尝试使用JSON路径表达式查询成绩在科学科目中得分超过80分的学生。

错误分析

在上述代码中,我们使用了JSON_EXTRACT函数来提取grades列中的"science"字段的值。然而,由于我们在插入记录时并没有包含"science"字段,因此JSON路径表达式是无效的。这导致MySQL返回错误3143。

解决方案

要解决这个错误,我们需要确保JSON路径表达式中引用的字段在JSON数据中存在。在上述案例中,我们可以修改插入语句,将"science"字段添加到grades列中的JSON数据中。修改后的代码如下:

sql

INSERT INTO students (id, name, grades)

VALUES (1, 'John', '{"math": 90, "english": 80, "science": 85}'),

(2, 'Jane', '{"math": 95, "english": 85, "science": 90}');

在修改后的代码中,我们添加了"science"字段,并为其分别赋予了85和90的值。这样,我们就可以成功执行查询语句,找到成绩在科学科目中得分超过80分的学生。

在使用MySQL 5.7时,如果遇到错误3143 (42000):无效的JSON路径表达式,需要检查JSON路径表达式中引用的字段是否在JSON数据中存在。如果不存在,可以通过修改插入语句来添加所需字段,以解决这个错误。正确使用JSON路径表达式可以帮助我们更方便地查询和修改JSON格式的数据。