SQL更新longtext列JSON值时遇Error Code:1292错误求助
问题分析
Error Code: 1292的根源是手动拼接JSON字符串时,嵌套单引号未正确转义,导致MySQL误将部分字符串解析为数值计算表达式,触发“截断不正确的DOUBLE值”错误。你的更新语句中,CONCAT('*', ...)里的单引号与外层包裹字符串的单引号冲突,MySQL错误地将其当作表达式分割符,尝试把字符串转为DOUBLE类型计算,最终报错。
解决方案
方案1:手动正确转义嵌套单引号
MySQL中,单引号包裹的字符串里,单引号需用两个连续单引号转义(而非反斜杠),确保整个JSON被识别为文本值。
修正后的更新语句:
UPDATE test_database SET JSONVALUE = '{ "ChangePasswordQry": ["SET PASSWORD FOR ''${accountName}''@''%'' = CONCAT(''*'', UPPER(SHA1(UNHEX(SHA1(''${randomPassword}'')))))", "FLUSH PRIVILEGES"] }' WHERE STUDENTATTRIBUTEKEY='CHANGEPASSJSON' AND STUDENTNAME='STUDENT123';
方案2:用MySQL JSON函数构造(更稳妥)
避免手动转义的麻烦,直接用JSON_OBJECT和JSON_ARRAY生成JSON,MySQL会自动处理转义逻辑:
UPDATE test_database SET JSONVALUE = JSON_OBJECT( 'ChangePasswordQry', JSON_ARRAY( CONCAT('SET PASSWORD FOR ''${accountName}''@''%'' = CONCAT(''*'', UPPER(SHA1(UNHEX(SHA1(''${randomPassword}'')))))'), 'FLUSH PRIVILEGES' ) ) WHERE STUDENTATTRIBUTEKEY='CHANGEPASSJSON' AND STUDENTNAME='STUDENT123';
验证说明
- 方案1通过手动转义所有嵌套单引号,确保JSON字符串被完整识别为文本,而非表达式。
- 方案2利用原生JSON函数,无需手动处理转义,代码可读性更高,也规避了转义错误风险,适合复杂JSON结构的更新。
内容的提问来源于stack exchange,提问作者Shalini Gupta
相关产品推荐
相关产品推荐

