我目前正在尝试从我的共享 inmotionhosting 帐户(最近收到了很棒的服务)切换到我已设置的 Amazon EC2 服务器。我无法在 EC2 帐户中使用加密功能。
在我的 PHP 代码中,所有文本在放入 SQL 之前都会由 mcrypt 加密。我推断这些 mcrypt 字符是导致我所有查询抛出错误的原因。 (我知道这是因为编码问题,但关于该主题的 Google 搜索并不太清楚我需要将注意力集中在哪里。)
解释问题的更简单的方式。在我的新托管帐户上,此 SQL 查询不起作用:
更新mydatabase.clients SET Firstname='\'å».”é¶Q' WHERE id_client=65
但这确实
更新 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中的差异并运行了这行代码:
更改数据库 mydatabase 默认字符集 latin1
它成功地将character_set_database更改为“latin1”以匹配另一个,但没有解决问题。
最后,表中的所有列都使用排序规则“latin1_swedish_ci”
如果您能提供任何帮助,我们将不胜感激!
最佳答案
将加密的字符串存储为二进制(或类似)类型。还要确保您转义加密的字符串。两者都是正确执行此操作的重要部分!
我一直在使用 MySQL 和 Mcrypt,并将加密数据和初始化向量存储为二进制,并且在将所有这些字符串放入查询之前对它们进行转义。就像魅力一样。
关于mysql编码加密文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8794373/