mysql编码加密文本

标签 mysql encoding collation mcrypt

我目前正在尝试从我的共享 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/

相关文章:

mysql - 将 xml 作为 blob 插入 mysql 数据库

MySQL-选择或插入

MySQL 查询 : Write max(Date) from whole table to each row

c++ - 使用 C++ 从 MySQL 数据库获取字符串时编码错误

mysql - 如果我期望的话,最好的 mysql 排序规则 ñ ü ï á é í ó ú

mysql - 如何在sql中选择2个表但不重复?

java - Android:设置 utf-8 编码为字符串和数组

网站的Python正确编码(Beautiful Soup)

postgresql - 存储多语言字符串的最佳实践

mysql - 德语的最佳 MySQL 排序规则是什么