需求是:对于插入mysql的字段进行加密,读取的时候解密本来想在java类里写,但是发现一个更简单的办法用encode和decode比如:INSERT INTO tbl_vip (vip_no, address) VALUES (32,encode('xiaoming', 'mykey'));
读取的时候用:select decode(address, 'mykey')  from tbl_vip问题来了:如果把address字段设置成varchar,有时候无法插入数据,报1366错误,因为encode后的数据是二进制的,而varchar不兼容二进制数据后来把address set成varbinary,插入数据的时候就没问题,不报1366错了,但是对于插入的中文比如:INSERT INTO tbl_vip (vip_no, address) VALUES (32,encode('小明', 'mykey'));读取的时候就是乱码了,请问如何解决呢?或者有更好的加密 解密手段么? 感谢非常!

解决方案 »

  1.   

    比较不太理解的是 将address set成 varchar,为何无法插入二进制数据
      

  2.   

    像你这种加密,出于安全性考虑,建议还是用程序加密后再写进数据库,毕竟能访问数据库的人都有可能能调用mysql的解密函数来解掉,这样,加密其实也没什么意义了。
      

  3.   

    你加个 set names gbk看看吧
    我试了是可以的