• mysql decode encode 乱码问题


    帮网友解决了一个问题,感觉还是挺好的。

    问题是这样的: 

     问个问题:为什么我mysql中加密和解密出来的字段值不一样?
    AES_ENCRYPT和  AES_DECRYPT 

     但是解密出来就不对了 有时候加密变成空值 

    我试过,确实有这样的情况:

    INSERT INTO test () VALUES (ENCODE('老师你好','123456'));

    插入了一个ENCODE的字符串,

    SELECT DECODE(testField,'123456' ) FROM test;

    查询出来的结果 是è€å¸ˆä½ å¥½, 看不懂啊!

     

    注意到,test 表的编码是latin1, 如果test 表的编码是utf8 或者 gbk, 那么, INSERT INTO test () VALUES (ENCODE('老师你好','123456')); 这一句是会失败的, 我猜测 应该是编码问题。 如果开始是utf8,一个字符串在mysql之后, 其内容发生变化, 然后就变成了utf8不能认识的字符串了。 但是latin1 是可以认识的,因为 latin1是单字节编码的。

     ENCODE('老师你好','123456') 是可以存入latin1 的。 但是不能正确读取。 其解析出来的字符串,latin1 无法表示 

    注意到这一点,其实就好办了, testField 字段就用 latin1 编码, 读取的时候以latin1 的方式解析,然后再次组装成 utf8,。 

    这样,虽然可以, 但是,般不建议通过把密码明文直接传递到 数据库

    应该是加密后再传递
    通过md5 即可 

    测试代码如下:

    # show variables like 'character%';
    drop TABLE if EXISTS test;
    /* generating test table */
    CREATE TABLE `test` (
    `testField` varchar(512) DEFAULT NULL
    # ) ENGINE=InnoDB DEFAULT CHARSET= 'UTF8' COLLATE utf8_general_ci; 
    ) ENGINE=InnoDB DEFAULT CHARACTER SET latin1;
    
    /* adding some test data to it */
    # INSERT INTO test () VALUES (DES_ENCRYPT("Hello")), (DES_ENCRYPT("World"));
    
    # INSERT INTO test () VALUES (ENCODE('abc','123')), ENCODE('mytext','mykeystring'));
    
    # INSERT INTO test VALUES('a阿萨德b'); 
    INSERT INTO test () VALUES (ENCODE('老师你好','123456'));
    
    SELECT DECODE(testField,'123456' ) FROM test;
    
    SELECT * FROM test;
    
    # SELECT ENCODE('abc','123'), DECODE('aaa','123');
    
    SELECT DECODE(ENCODE('mytext','mykeystring'),'mykeystring');
    
    
    # SELECT DES_ENCRYPT('aa'), DES_DECRYPT('asdadw');
  • 相关阅读:
    解决no such file or directory的问题
    手把手教你如何通过企业账号in house发布程序 ----都是被苦逼的appstore审核逼的!!!!!
    java中如何使用log4j
    xStream完美转换XML、JSON
    Spring MVC 教程
    StringUtils 类的使用
    CSS 与IE浏览器兼容问题
    CSS各种颜色的符号
    TABLE 应用 CSS美化
    初学WebSocket
  • 原文地址:https://www.cnblogs.com/FlyAway2013/p/7340106.html
Copyright © 2020-2023  润新知