mysql decode encode 乱码问题

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');

 

posted on 2017-08-10 16:47 CanntBelieve 阅读(...) 评论(...) 编辑 收藏

转载于:https://www.cnblogs.com/FlyAway2013/p/7340106.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/268673.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

matlab读取正则找科学,MATLAB常用正则表达式记录

MATLAB正则表达式一、正则表达式正则表达式是一串用于定义某种模式的字符。在有些情况下(例如,在解析程序输入或处理文本块时),您通常会使用正则表达式在文本中搜索与该模式匹配的一组单词。数据处理是matlab的长项,但是正则表达式在做一些不…

通过JDBC进行简单的增删改查(以MySQL为例)

目录 前言:什么是JDBC 一、准备工作(一):MySQL安装配置和基础学习 二、准备工作(二):下载数据库对应的jar包并导入 三、JDBC基本操作 (1)定义记录的类(可选) (2)连接的获…

Windows Mobile 6.0下实现自绘多种状态按钮(Win32) 续

这篇文章是以前的补充: http://www.cnblogs.com/wangkewei/archive/2009/02/24/1397490.html 放在首页是想借助各位从事Windows Mobile本地代码开发的前辈们力量,把这方面的资料完善一下,我会总结更多有关这方面的文章。 1.原理介绍DRAWITE…

新书品读《三级网络技术预测试卷与考点解析》,欢迎拍砖、跟砖提建议。

新书品读:《三级网络技术预测试卷与考点解析》已正式出版上市,欢迎拍砖、跟砖提建议。第1章 考前预测试卷11.1 上午试题(考试时间120分钟,满分100分)1.1.1 笔试试卷一、选择题(每小题1分,共60…

PHP外部引用样式,PHP引用外部css有什么好处

PHP引用外部css的好处有:1、网页处理速度会更快一些;2、可以防止一些电脑程度较低的使用者直接看到CSS语法;3、维护方便。PHP引用外部css有什么好处?php页面外部调用css样式表时有三处优点:第一个好处:网页…

基于消息与.Net Remoting的分布式处理架构

分布式处理在大型企业应用系统中,最大的优势是将负载分布。通过多台服务器处理多个任务,以优化整个系统的处理能力和运行效率。分布式处理的技术核心是完 成服务与服务之间、服务端与客户端之间的通信。在.Net 1.1中,可以利用Web Service或者…

centos7安装nginx和php,centos7安装nginx1.10和php7

安装nginx。1.首先在根目录下创建一个software文件夹用来存储下载的压缩包。2.然后cd跳转的software文件夹下,进行压缩包的下载wget -c https://nginx.org/download/nginx-1.10.1.tar.gz3.解压,然后跳转到解压的目录下tar -zxvf nginx-1.10.1.tar.gzcd n…

oracle恢复指定数据文件,Oracle特殊恢复-BBED修改某个数据文件头

Oracle数据文件头中的scn要与控制文件中的scn一致,数据库才可以open,在open过程中我们可以通过bbed来修改某个数据文件头的scn,来欺骗oracle,来open库。1、环境如下使用Oracle 11gR2进行测试,具体版本为11.2.0.4SYSlin…

Hyper-V和多处理器虚机

架构概述Hyper-V采用基于Hyperisor的架构,并且充分利用Windows驱动模型,以便提供广泛的硬件支持。Hypervisor可以把单个服务器划分为多个CPU和内存的容器。由于采用微内核架构,Hyper-V可以提供高效的分区间通信机制,并在此基础上搭…