最近在处理项目上数据加密的事宜的时候,遇到一个解密中文字段数据库乱码的问题,详细记录一下,活到老学到老。
我们采用的加密解密方式为HEX/UNHEX结合AES_ENCRYPT的加密解密。以下是示例
SELECT HEX(AES_ENCRYPT('西安','ceshi123')) ;
加密后的数据为:
74EDA1DBFABC4896668EA604C1E2469E
ok,加密一切正常,下来使用解密函数进行解密
SELECT AES_DECRYPT(UNHEX('74EDA1DBFABC4896668EA604C1E2469E'),'ceshi123') as ceshi ;
解密后的结果集为:
西å®
这个什么鬼玩意啊,咋就乱码了,这个不行啊。
网上查询了半天,查博客终于解决了问题 ,就是使用cast方法,把结果“强行转换为字符串类型”!
用cast( ‘xxx’ as char)方法将数据包装成为一个整体就可以完美解决。
SELECT cast(AES_DECRYPT(UNHEX('74EDA1DBFABC4896668EA604C1E2469E'),'ceshi123') as char ) as ceshi;
在查询出的解密字段结果之上,再套一层cast(),让它“成为一个整体”,就不会有问题了!
以此记录工作中遇到的各种问题