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

MariaDB插入AES加密数据报ERROR 1366(22007)错误求助

故障原因

aes_encrypt()加密函数的返回值是原始二进制字节流,不属于合法的文本字符序列。你当前存储加密结果的data字段为varchar文本类型,MariaDB写入时会按照字段配置的字符集(默认多为utf8mb4)校验内容合法性,二进制流中的非法字符序列无法通过校验,就会触发1366编码报错。

解决方法

方案1:修改字段类型为二进制类型(推荐)

直接将字段调整为专门存储二进制数据的类型,跳过字符集校验,不会出现编码问题,也没有额外的编码转换开销:

  • 执行改表语句调整字段类型:
ALTER TABLE test MODIFY COLUMN data VARBINARY(250) DEFAULT NULL;
  • 改表完成后,原插入语句可直接正常执行:
INSERT INTO test (data) VALUES (aes_encrypt('mydata','key123456'));
  • 解密查询直接调用对应函数即可:
SELECT aes_decrypt(data, 'key123456') AS plain_data FROM test;

方案2:转码为文本格式后存入varchar字段

如果因为业务原因不能修改字段类型,可以将加密后的二进制结果转成Base64编码的合法文本再存储,注意解密时要先做Base64解码:

  • 插入时转码:
INSERT INTO test (data) VALUES (TO_BASE64(aes_encrypt('mydata','key123456')));
  • 查询解密时先解码再解密:
SELECT aes_decrypt(FROM_BASE64(data), 'key123456') AS plain_data FROM test;

注意:禁止直接将原始二进制加密结果写入varchar类型字段,除了触发编码报错外,还可能因为字符集自动转义、长度截断导致加密数据永久损坏,无法解密还原。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.02 07:06:35