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

在MySQL中使用AES_ENCRYPT时获取错误的字符串值:'\x92\xB7\xFF\xF3',mysql,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

我知道,我在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\u user插入行,但密码为空

通过引用类似的问题,我所做的如下 1套名称utf8mb4 2将表格用户转换为字符集utf8mb4; 3在my.ini配置文件中,我添加了字符\u set\u server=utf8mb4

但我还是遇到了同样的问题。如何解决这个问题

更新: 这个问题不仅仅限于密码。我想做的是将所有需要的列置乱,这样用户就不能正常地看到这些列。
所以,我使用了AES_加密

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

或者

将数据存储为十六进制:

插入用户名,密码值D001,十六进制加密'password1234',您好

并在需要解密时使用UNHEX函数;艾斯·艾斯·艾斯·艾斯帕斯,你好

将密码列转换为可以存储二进制数据的类型,例如binary或varbinary类型。
这段代码永远不会起作用。您正在日志文件中存储普通密码@PaulSpiegel在问题中更新了不要加密密码。把它们切碎。有关原因,请参见。问题中已更新。密码列我刚才用作参考。我到底想做什么,不仅是为了密码。因此,任何用户都无法正常看到数据。如果是这样,我是否必须将所有列都设置为varbinary?或者任何其他方式?例如,在插入时,我用一个密钥对数据进行置乱,当我用同一个密钥使用select时,我看到实际数据。AES_ENCRYPT生成二进制数据。如果要将AES_ENCRYPT的结果存储在列中,则需要将AES_ENCRYPY的结果转换为十六进制,以便将其存储在varchar/char/text类型的列中,或者需要将列转换为可存储二进制数据的类型。明白。如果我想像你提到的那样对包含浮点值的列执行同样的操作呢?没有区别,你需要执行相同的操作-浮点或int列不能存储二进制数据,当然,对SQL数据库中的所有列进行加密听起来是错误的做法。