CREATE DEFINER=`abc`@`%` FUNCTION `abc_test_db`.`S_ENCODER`(p_input_string varchar(40))
RETURNS varchar(40)
READS SQL DATA BEGIN
DECLARE l_encrypted_value varchar(40);
DECLARE v_input_string varchar(40);
DECLARE v_key_string varchar(30);
DECLARE flag varchar(1); SET v_key_string = 'ssss1234';
set flag = '1';
IF flag = '1' THEN
RETURN DES_ENCRYPT(p_input_string, v_key_string);
ELSE
SET l_encrypted_value = p_input_string;
END IF; RETURN l_encrypted_value; END$$头一次写mysql的函数。
为什么执行结果是null啊,还请大家多帮忙!
RETURNS varchar(40)
READS SQL DATA BEGIN
DECLARE l_encrypted_value varchar(40);
DECLARE v_input_string varchar(40);
DECLARE v_key_string varchar(30);
DECLARE flag varchar(1); SET v_key_string = 'ssss1234';
set flag = '1';
IF flag = '1' THEN
RETURN DES_ENCRYPT(p_input_string, v_key_string);
ELSE
SET l_encrypted_value = p_input_string;
END IF; RETURN l_encrypted_value; END$$头一次写mysql的函数。
为什么执行结果是null啊,还请大家多帮忙!
READS SQL DATA
BEGIN
DECLARE l_encrypted_value VARCHAR(40);
DECLARE v_input_string VARCHAR(40);
DECLARE v_key_string VARCHAR(30);
DECLARE flag VARCHAR(1);
DECLARE dd VARCHAR(40);
SET v_key_string = 'ssss1234';
SET flag = '1';
IF flag = '1' THEN
INSERT INTO qt1(d) VALUES(1);
SET dd=DES_ENCRYPT(p_input_string, v_key_string);
ELSE
SET dd=p_input_string;
END IF;
RETURN dd;
END$$DELIMITER ;
但select DES_ENCRYPT(p_input_string, v_key_string);确可以得到结果,不知道为什么?
注意,这个函数只有当MySQL在SSL 的支持下配置完毕时才会运作。请参见5.8.7节,“使用安全连接”.
mysql> select DES_ENCRYPT('credit_card_number');
+-----------------------------------+
| DES_ENCRYPT('credit_card_number') |
+-----------------------------------+
| €:O °$?蠲2D谒辱7G滗宦 |
+-----------------------------------+
1 row in set (0.38 sec)mysql>
+------------------------------------------------------+
| AES_DECRYPT(AES_ENCRYPT('1234567890','pswd'),'pswd') |
+------------------------------------------------------+
| 1234567890 |
+------------------------------------------------------+
1 row in set (0.00 sec)mysql>mysql> select DES_DECRYPT(DES_ENCRYPT('1234567890') ) ;
+-----------------------------------------+
| DES_DECRYPT(DES_ENCRYPT('1234567890') ) |
+-----------------------------------------+
| 1234567890 |
+-----------------------------------------+
1 row in set (0.00 sec)mysql>
这种方式试过了,没有问题。最初的问题解决了,只要把返回值改为blob就可以了,但新的问题来了。汉字时加解密不行啊,有乱码。
检查字符集设置。 不妨先 set names 'gbk'; 试一下。
MySQL 中文显示乱码