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啊,还请大家多帮忙!

解决方案 »

  1.   

    DELIMITER $$DROP FUNCTION IF EXISTS `S_ENCODER`$$CREATE DEFINER=`root`@`localhost` FUNCTION `S_ENCODER`(p_input_string VARCHAR(40)) RETURNS varCHAR(40) CHARSET utf8
        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 ;
      

  2.   

    楼上的可以得到结果吗?我执行了返回的还是空。我原来也是SET dd=DES_ENCRYPT(p_input_string, v_key_string);这种方式写的,也不行。现在已经可以明确了SET dd=DES_ENCRYPT(p_input_string, v_key_string);这步的结果是null,
    但select DES_ENCRYPT(p_input_string, v_key_string);确可以得到结果,不知道为什么?
      

  3.   


    注意,这个函数只有当MySQL在SSL 的支持下配置完毕时才会运作。请参见5.8.7节,“使用安全连接”.
      

  4.   

    你测试一下直接select DES_ENCRYPT('credit_card_number'); 的结果是什么。 估计你的调用参数有问题。mysql>
    mysql> select DES_ENCRYPT('credit_card_number');
    +-----------------------------------+
    | DES_ENCRYPT('credit_card_number') |
    +-----------------------------------+
    | €:O   °$?蠲2D谒辱7G滗宦         |
    +-----------------------------------+
    1 row in set (0.38 sec)mysql>
      

  5.   

    确实是SSL没有配置。我把DES_ENCRYPT换成AES_ENCRYPT返回的串用AES_DECRYPT解不出来是什么问题啊,是不是返回类型不能用varchar啊?
      

  6.   

     建议直接做如下测试。mysql> Select AES_DECRYPT(AES_ENCRYPT('1234567890','pswd'),'pswd') ;
    +------------------------------------------------------+
    | 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>
      

  7.   

    感谢LS的。
    这种方式试过了,没有问题。最初的问题解决了,只要把返回值改为blob就可以了,但新的问题来了。汉字时加解密不行啊,有乱码。
      

  8.   


    检查字符集设置。 不妨先 set names 'gbk'; 试一下。
      

  9.   

    http://blog.csdn.net/ACMAIN_CHM/archive/2009/05/12/4174186.aspx
    MySQL 中文显示乱码