在MySQL中使用AES_ENCRYPT时获取不正确的字符串值:'\ x92 \ xB7 \ xFF \ xF3'

时间:2019-03-12 08:47:57

标签: mysql

我知道并且我已经研究了Stackoverflow中许多非常相似的问题。我已经尝试了所有解决方案,但对我没有任何帮助。

我已使用以下查询插入用户记录

INSERT INTO `user`(user_name,`password`) VALUE ("D001",AES_ENCRYPT('password1234',"hello"))

当我这样做时,我会得到

1 row(s) affected, 1 warning(s)

Execution Time : 00:00:00:046
Transfer Time  : 00:00:00:000
Total Time     : 00:00:00:046

Warning Code : 1366
Incorrect string value: '\x92\xB7\xFF\xF3\xD1\xF6...' for column 'password' at row 1
---------------------------------------------------

通过上述更新,仅使用user_user插入行,但密码为空。

我通过提及类似问题所做的工作如下
1)设置名称utf8mb4
2)更改表user转换为字符集utf8mb4;
3)在my.ini配置文件中,添加了 character_set_server = utf8mb4

仍然遇到同样的问题。该如何解决?

更新:
问题不仅限于密码。我想做的是对所有必需的列进行加扰,以使用户无法正常看到这些列。 因此,我使用了AES_ENCRYPT。

1 个答案:

答案 0 :(得分:1)

问题是您将二进制数据存储在char,varchar或text列中。

任何一个

  1. 将数据存储为十六进制:

    插入user(用户名,password)值(“ D001”,HEX(AES_ENCRYPT('password1234',“ hello”)))

并在需要解密时使用UNHEX()函数; AES_DECRYPT(UNHEX(password),"hello")

  1. password列转换为可以存储二进制数据的类型,例如binaryvarbinary类型。