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

问题是这样的:

 问个问题:为什么我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() 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','')), ENCODE('mytext','mykeystring')); # INSERT INTO test VALUES('a阿萨德b');
INSERT INTO test () VALUES (ENCODE('老师你好','')); SELECT DECODE(testField,'' ) FROM test; SELECT * FROM test; # SELECT ENCODE('abc',''), DECODE('aaa',''); SELECT DECODE(ENCODE('mytext','mykeystring'),'mykeystring'); # SELECT DES_ENCRYPT('aa'), DES_DECRYPT('asdadw');

mysql decode encode 乱码问题的更多相关文章

  1. Python 关于 encode与decode 中文乱码问题

    字符串在Python内部的表示是unicode编码,因此,在做编码转换时,通常需要以unicode作为中间编码,即先将其他编码的字符串解码(decode)成unicode,再从unicode编码(en ...

  2. 还是关于编码——decode & encode的探究

    最近被py3.4中的编码折磨的不要不要的,decode & encode的使用.功能貌似在2.7—3.0有一个巨大的变化.网上查询的一些解答很多是基于2.7中的unicode功能,给出的解答是 ...

  3. mysql字符设置乱码问题

    在操作系统中对于任意一个字符而言是没有编码格式概念的:同样的字母在不同的编码集里面可能代表不同的东西:关键在于你用什么样的软件打开它,软件本身是以什么样的编码格式来显示你的字符,那么你的字符当前就是什 ...

  4. mysql数据库 中文乱码

    看到一篇很好的文章,转录于此 中文乱码似乎是程序编写中永恒的一个话题和难点,就比如MySQL存取中文乱码,但我想做任何事情,都要有个思路才行,有了思路才知道如何去解决问题,否则,即使一时解决了问题,但 ...

  5. ubuntu mysql emma中文乱码问题解决

    ubuntu mysql emma中文乱码问题解决 emma默认用apt-get 安装的话,emma是不支持中文的,配置文件或直接修改emma程序源文件(python). apt-get安装emma ...

  6. 分享一个解决MySQL写入中文乱码的方法

    分享一个解决MySQL写入中文乱码的方法 之前有发帖请教过如何解决MySQL写入中文乱码的问题.但没人会,或者是会的人不想回答.搜索网上的答案并尝试很多次无效,所以当时就因为这个乱码问题搁浅了一个软件 ...

  7. mysql保存中文乱码的原因和解决办法

    当你遇到这个mysql保存中文乱码问题的时候,期待找到mysql保存中文乱码的原因和解决办法这样一篇能解决问题的文章是多么激动人心.    也许30%的程序员会选择自己百度,结果发现网友已经贴了很多类 ...

  8. R读取MySQL数据出现乱码,解决该问题的方法总结

    最终的解决办法直接看 4 我的思路: 我用的都是utf-8编码,电脑系统win7, MySQL-Front进行数据库的可视化. 1.我用的是RStudio,先去设置R的默认编码: Tools→Glob ...

  9. Mybatis插入MySQL数据库中文乱码

    Mybatis插入MySQL数据库中文乱码 在dataSource.properties配置文件中设置useUnicode=true&characterEncoding=utf-8编码即可. ...

随机推荐

  1. android 逆向

    用到两个工具 :dex2jar和jd-gui 1,重命名ContactManager.apk为ContactManager.zip并解压得到文件classes.dex: 2,解压dex2jar-0.0 ...

  2. 配置 influxDB 鉴权及 HTTP API 写数据的方法

    本文简要描述如何为 InfluxDB 开启鉴权和配置用户管理权限(安装后默认不需要登录),以及开启鉴权后如何使用 HTTP API 写数据. 创建 InfluxDB 管理员账号创建 admin 帐号密 ...

  3. C++进阶--类的继承

    //############################################################################ /* * 公有,保护,私有继承 */ cl ...

  4. Ubuntu 14.10 下连接SuperVessel Cloud

    第一次创建实例后,系统会分配一个VPN用户,用于连接到系统. 官方帮助文档给出了使用方法 Linux VPN 客户端的配置方法 . 安装 VPNC: $ apt-get install vpnc $ ...

  5. 史上最全Spring面试71题与答案

    1.什么是spring? Spring是个java企业级应用的开源开发框架.Spring主要用来开发Java应用,但是有些扩展是针对构建J2EE平台的web应用.Spring框架目标是简化Java企业 ...

  6. MySQL并发复制系列一:binlog组提交 (转载)

    http://blog.csdn.net/woqutechteam/article/details/51178803 MySQL  Binary log在MySQL 5.1版本后推出主要用于主备复制的 ...

  7. vue属性

    1. 图片地址: data:{ url:"https://www.baidu.com/img/bd_logo1.png"}, <img v-bind:src="ur ...

  8. 如何使用webpack打包项目

    webpack是前端开发中比较常用的打包工具之一,另外还有gulp,grunt.之前没有涉及过打包这块,这里介绍一下使用webpack打包的流程. Grunt和Gulp的工作方式是:在一个配置文件中, ...

  9. Linux下Mysql自启动

    如果你都是按照默认配置安装的那么只要按照如下步骤就可以了 1.cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysql   将服 ...

  10. CS229 5.用正则化(Regularization)来解决过拟合

    1 过拟合 过拟合就是训练模型的过程中,模型过度拟合训练数据,而不能很好的泛化到测试数据集上.出现over-fitting的原因是多方面的: 1) 训练数据过少,数据量与数据噪声是成反比的,少量数据导 ...