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

问题描述 投票:-1回答:1

我知道并且我在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)SET NAMES utf8mb4 2)ALTER TABLE user CONVERT TO CHARACTER SET utf8mb4; 3)在my.ini配置文件中,我添加了character_set_server = utf8mb4

我仍然遇到同样的问题。怎么解决这个?

更新: 问题不仅仅是密码。我想要做的是加扰所有必需的列,以便用户无法正常查看这些列。所以,我使用过AES_ENCRYPT。

mysql
1个回答
1
投票

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

  1. 将数据存储为十六进制: INSERT INTO user(user_name,password)VALUE(“D001”,HEX(AES_ENCRYPT('password1234',“hello”)))

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

要么

  1. 将您的password列转换为可以存储二进制数据的类型,例如binaryvarbinary类型。
© www.soinside.com 2019 - 2024. All rights reserved.