You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 08:35:57