JSON_VALID()可批量筛查非法JSON值,返回0表示语法错误,不抛异常;查整表用WHERE JSON_VALID(col)=0,空值需单独判断;建议加CHECK约束并避免空字符串入库。
直接在WHERE里套JSON_VALID()就能筛出所有非法行,它返回0就代表JSON语法错误,不抛异常、不中断查询。比逐条试INSERT或SELECT更省事。
SELECT id, json_col FROM table_name WHERE JSON_VALID(json_col) = 0;
SELECT id, json_col FROM table_name WHERE json_col = '' OR json_col IS NULL;(注意:JSON_VALID('')返回0,JSON_VALID(NULL)返回NULL)CHECK (json_col IS NOT NULL AND JSON_VALID(json_col))约束(MySQL 8.0.16+支持)位置0出错,基本等于“连JSON的边都没摸到”,常见于:空字符串''、纯空白(空格/换行)、'null'(字符串不是JSON字面量)、或根本没传值(MyBatis-Plus未设默认值导致字段为'')。
JSON_VALID('') → 0,JSON_VALID('null') → 1(合法),JSON_VALID("null") → 0(单引号非法){}或[],别留""
@TableField(fill = FieldFill.INSERT)并配合自动填充逻辑,避免入库空串如果是主从复制卡住,或者LOAD DATA报错,Last_SQL_Error里的“position 0”提示要立刻查对应SQL的VALUES部分——大概率是某一行的JSON字段被拼成了''或'{...'(少结尾括号)。
SHOW BINLOG EVENTS IN 'xxx' FROM yyy LIMIT 1(从Exec_Master_Log_Pos往前推)找原始SQLSELECT JSON_VALID(?), ?逐个参数测试,快速锁定哪个参数是空或畸形JSON_VALID()行为一致,但CAST(... AS JSON)可能因sql_mode差异提前失败开发时本地测不出问题,上线后突然报错,往往是因为测试数据没覆盖空值路径。靠代码判断StringUtils.isNotBlank()不够,MySQL对JSON的校验更严格。
feature_data JSON CHECK (JSON_VALID(feature_data) AND feature_data != '')
TEXT存JSON再手动解析——失去自动校验,也丧失->操作符和JSON索引能力UPDATE ... SET json_col = COALESCE(NULLIF(json_col, ''), '{}') WHERE JSON_VALID(json_col) = 0;兜底,再加约束JSON_VALID()返回1、但后续JSON_EXTRACT()取不到值的“合法垃圾”——比如{"name": null}或{}。这类问题得靠业务逻辑层约定,数据库管不了语义。 Workbuddy + HY 3D Generation使用心得体会
使用阿里云向量检索服务DashVector实现关键词感知的向量检索
智谱创始人唐杰谈 DeepSeek:很震撼,开启了“AI 做事”新范式
小米路由器ax3600和ax6000的主要区别是什么(小米路由器ax3600和ax6000的性能参数有何不同)
[Android 从零到一] Kotlin Channel 与复杂并发场景:从生产者-消费者到结构化并发治理
DeepSeek 梁文锋旗下幻方量化 2025 年收益率 56.6%,管理规模已超 700 亿元