我目前正在尝试从我的共享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”以匹配另一个,但没有解决问题。
最后,我表中的所有列都使用了Collation“latin1_swedish_ci”
非常感谢您给予的任何帮助!
答案 0 :(得分:1)
将加密字符串存储为二进制(或类似)类型。还要确保您正在转义加密的字符串。两者都是做到这一点的重要部分!
我一直在使用MySQL和Mcrypt,我将加密数据和初始化向量存储为二进制文件,并在将它们放入查询之前将所有这些字符串转义。像魅力一样。