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

MySQL JSON列更新报错:无法从binary字符集字符串创建JSON值

解决MySQL JSON列更新时的"Data truncation: cannot create a JSON value from a string with Character Set 'binary'"错误

我之前处理过完全相同的场景,这个问题其实是字符集不匹配导致的——虽然你的表用的是utf8mb4_bin字符集,但更新时传入的字符串被MySQL识别为binary字符集,它没法把二进制标记的字符串解析成有效的JSON值。

下面是几种针对性的解决办法:

1. 直接在SQL语句中转换字符集

如果是直接执行SQL更新,可以用CONVERT()函数把要插入的JSON字符串转换成utf8mb4字符集,示例:

UPDATE listing SET data = CONVERT('{"title": "Sample Listing", "price": 99}' USING utf8mb4) WHERE id = 1;

这样强制把字符串转换成JSON列兼容的字符集,就能正常解析了。

2. 检查并修正会话字符集设置

有时候是当前数据库会话的字符集配置有问题,导致传入的字符串被默认标记为binary。可以先查看当前会话的字符集:

SHOW VARIABLES LIKE 'character_set%';

如果看到character_set_client或者character_set_connection是binary,可以执行以下语句修正:

SET NAMES utf8mb4;

之后再执行更新语句就不会有问题了。

3. 程序端确保字符集正确

如果是通过应用程序(比如PHP、Python)更新数据,要确保数据库驱动使用utf8mb4字符集连接:

  • PHP (PDO):连接时指定字符集
    $pdo = new PDO('mysql:host=localhost;dbname=your_db;charset=utf8mb4', 'user', 'pass');
    
  • Python (MySQLdb):
    db = MySQLdb.connect(host="localhost", user="user", passwd="pass", db="your_db", charset="utf8mb4")
    

这样程序发送的字符串会被正确标记为utf8mb4字符集,MySQL就能正常解析成JSON了。

需要注意的是,utf8mb4_bin确实是JSON列区分大小写比较的合适字符集,你的表设置没问题,问题核心就是输入字符串的字符集不兼容,只要把输入转换成utf8mb4就能解决。

内容的提问来源于stack exchange,提问作者Arslan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 03:19:03