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

LZ-string压缩结果写入MySQL乱码问题求助(MEDIUMTEXT UTF8bin)

LZ-string压缩结果的MySQL存储方案及写入乱码解决

一、存储类型的选择

LZ-string的压缩输出分两种情况,对应不同的MySQL类型:

  • 如果输出是Unicode编码的可打印字符串(就像你给出的示例:㊁炆ౠ혏恮԰ᎀ찃挃뤀):推荐使用MEDIUMTEXT,但必须搭配**utf8mb4字符集**(MySQL原生的utf8其实是utf8mb3,只支持Unicode基础平面字符,无法覆盖LZ-string生成的部分特殊字符)。
  • 如果输出是二进制数据(比如LZ-string的compressToUint8Array方法结果):更推荐二进制类型,比如MEDIUMBLOB(支持最大16MB数据,足够大部分场景)。二进制类型直接存储原始字节,完全避免编码转换的坑。

二、解决写入后数据变全问号的问题

你遇到的全问号问题,核心是字符集不兼容导致无法识别的字符被替换,因为你当前用的UTF8bin是MySQL的utf8mb3字符集,无法容纳LZ-string生成的全部Unicode字符。按以下步骤解决:

  1. 修改数据库字段的字符集配置
    把目标字段的字符集改成utf8mb4,排序规则可选utf8mb4_bin(和你原来的UTF8bin逻辑一致)。执行SQL:

    ALTER TABLE 你的表名 MODIFY COLUMN 你的字段名 MEDIUMTEXT CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;
    

    👉 注意:操作前请备份数据,避免意外丢失。

  2. 修正ASP.NET Core的数据库连接字符串
    在连接字符串中明确指定字符集为utf8mb4,确保驱动和数据库通信时用正确编码传输。示例:

    Server=你的服务器地址;Database=你的数据库名;Uid=用户名;Pwd=密码;CharSet=utf8mb4;
    
  3. 确保请求传输的编码正确
    前端通过POST发送压缩数据时,要保证请求的Content-Type是application/json; charset=utf-8;后端ASP.NET Core使用[FromBody]绑定模型时,默认会正确解析UTF-8编码的内容,不需要额外配置,但如果是手动读取请求流,要指定编码为UTF8。

  4. 备选方案:切换到二进制类型存储
    如果你不想折腾字符集,直接把字段改成MEDIUMBLOB,在代码中把压缩后的字符串转成UTF-8字节数组再存入数据库,读取时再转回字符串解压。这种方式完全绕开编码问题,适合对性能或兼容性要求高的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 04:12:19