mysql编码加密文本

时间:2012-01-09 19:58:45

标签: mysql encoding collation mcrypt

我目前正在尝试从我的共享inmotionhosting帐户(最近收到了AWEFUL服务)切换到我设置的Amazon EC2服务器。我无法在EC2帐户中使用加密功能。

在我的PHP代码中,所有文本在被放入SQL之前都由mcrypt加密。我推断出那些mcrypt字符负责我的所有查询抛出错误。 (我知道这是因为编码问题,但谷歌搜索这个主题并不十分明确我需要关注的地方。)

解释问题的更简单方法。在我的新主机帐户上,此SQL查询不起作用:

UPDATE mydatabase.clients SET firstname ='\'å»。“é¶Q'WHEREid_client = 65

但这确实

UPDATE mydatabase.clients SET firstname ='Test'WHERE id_client = 65

这告诉我mcrypt函数正在使用SQL数据库无法理解的字符,因此查询无效。

其他一些信息......

当我在工作数据库上运行“SHOW VARIABLES LIKE'character_set_%'”时,我得到了这个:

Variable_name              Value
character_set_client       utf8
character_set_connection   utf8
character_set_database     latin1
character_set_filesystem   binary
character_set_results      utf8
character_set_server       latin1
character_set_system       utf8

当我在非工作数据库上执行此操作时,我得到:

Variable_name              Value
character_set_client       utf8
character_set_connection   utf8
character_set_database     utf8
character_set_filesystem   binary
character_set_results      utf8
character_set_server       utf8
character_set_system       utf8

我在character_set_database中看到了区别并运行了这行代码:

ALTER DATABASE mydatabase DEFAULT CHARACTER SET latin1

它成功地将character_set_database更改为“latin1”以匹配另一个,但没有解决问题。

最后,我表中的所有列都使用了Collat​​ion“latin1_swedish_ci”

非常感谢您给予的任何帮助!

1 个答案:

答案 0 :(得分:1)

将加密字符串存储为二进制(或类似)类型。还要确保您正在转义加密的字符串。两者都是做到这一点的重要部分!

我一直在使用MySQL和Mcrypt,我将加密数据和初始化向量存储为二进制文件,并在将它们放入查询之前将所有这些字符串转义。像魅力一样。