对于一些复杂的汉字来说,MySQL的默认支持不是很好,所以会出现显示乱码的情况,针对这种情况,需要用MySQL提供的双向加密函数进行处理,再进行原始数据的添加和查询;双向,见文知意,就是加密和解密,在添加数据的时候进行加密,查询的时候进行相应的解密,在这里个人收集了一些,共享参考。
ENCODE()和DECODE()
ENCODE(str, pass_str):该函数使用pass_str作为密码来加密字符串str,其加密的结果可以通过DECODE()函数来解密。该函数返回的结果是一个同str等长;
DECODE(crypt_str, pass_str):该函数使用pass_str作为密码来解密使用ENCODE()加密后的字符串crypt_str。
DES_ENCRYPT()和DES_ENCRYPT()
DES_ENCRYPT(str[, {key_num|key_str}]):该函数使用三重DES算法连同给定的密钥来加密加密字符串;
DES_DECRYPT(crypt_str[, key_str]):该函数解密一个通过DES_ENCRYPT()加密的字符串,如果出现错误,该函数返回NULL。
COMPRESS()和UNCOMPRESS()
COMPRESS(string_to_compress):该函数压缩一个字符串并且返回一个二进制串。该函数需要MySQL已连同一个压缩库一块编译,比如zlib,否则该函数的返回值总为NULL。压缩后的字符串可以通过UNCOMPRESS()函数来解压缩。 NCOMPRESS(string_to_uncompress):该函数解压缩一个通过COMPRESS() 函数压缩的字符串。如果变量不是一个压缩值,则结果返回为NULL。
AES_ENCRYPT()和AES_DECRYPT()
AES_ENCRYPT()和AES_DECRYPT()可以加密/解密使用官方AES算法的数据。该算法使用128位密钥来编码,但用户可以将其扩展到256位。MySQL选用128位密钥,因为这样算法实现更快,而且对大多数用户而言它也足够安全了。
AES_ENCRYPT(str,key_str)函数加密一个字符串并返回一个二进制串。AES_DECRYPT(crypt_str, key_str) 函数可以解密使用官方AES(Advanced Encryption Standard)算法加密的数据并返回原有字符串,输入变量可以是任意长度。如果输入变量为NULL,那么该函数返回结果也为NULL。
因为AES是一个块级算法,需要使用补白来编码非偶数长度的字符串。
综合以上的处理方式来说,就是将原始数据转成计算机的语言(二进制)进行存储,而这些函数就是起到中间翻译的作用,按照函数的语法正常使用即可解决显示乱码的问题。
- 补充 MySQl 查询 count(*) count(1) count(主键) 怎样选择索引的 2017-06-14
- MySQl 查询 count(*) count(1) count(主键) 选哪个 2017-06-14
- mysql基础再回顾 2016-12-15
- MySQL错误之‘Got a packet bigger than 'max_allowed_packet' bytes’ 2016-01-13
- Navicat 操作数据库传输 2015-09-29