MySQL 5.7中AES_ENCRYPT与AES_DECRYPT无法正常工作问题咨询
MySQL 5.7中AES加密解密返回NULL的原因及解决方法
你的问题核心是变量赋值语法错误:在MySQL的SELECT语句里,=是比较运算符,不是赋值符号。
你写的代码:
SELECT @encrypt = AES_ENCRYPT('hello', 'key'); SELECT @decrypt = AES_DECRYPT(@encrypt, 'key');
第一行实际是在比较初始为NULL的@encrypt和加密结果,比较结果返回NULL,根本没给@encrypt赋值。后续@encrypt仍为NULL,解密自然也返回NULL,这也是你加unhex()没用的原因——变量本身就没拿到加密值。
正确写法
给用户变量赋值,需要用:=运算符,或者更清晰的SET语句:
方法1:使用:=赋值
SELECT @encrypt := AES_ENCRYPT('hello', 'key'); SELECT @decrypt := AES_DECRYPT(@encrypt, 'key'); -- AES_DECRYPT返回二进制字符串,需转换为明文 SELECT CAST(@decrypt AS CHAR);
方法2:使用SET语句(推荐)
SET @encrypt = AES_ENCRYPT('hello', 'key'); SET @decrypt = AES_DECRYPT(@encrypt, 'key'); SELECT CAST(@decrypt AS CHAR);
内容的提问来源于stack exchange,提问作者anon
相关产品推荐
相关产品推荐

