密码中的mysql特殊字符

时间:2014-06-17 22:11:33

标签: mysql special-characters

我在使用mysql帐户时出现问题,最终我将其缩小为用户密码,该密码包含子字符串'\ Y'。

如果我使用该密码创建用户,则无法使用该帐户登录:

mysql> create user 'test'@'localhost' identified by '\Y';
Query OK, 0 rows affected (0.00 sec)

mysql> exit
Bye

$ mysql -u test -p
Enter password:
ERROR 1045 (28000): Access denied for user 'test'@'localhost' (using password: YES)

这发生在两台不同的机器和两个不同的mysql版本上。

mysql  Ver 14.14 Distrib 5.5.37, for debian-linux-gnu (x86_64) using readline 6.3
mysql  Ver 14.14 Distrib 5.6.19, for osx10.9 (x86_64) using  EditLine wrapper

为什么会发生这种情况的任何线索?

1 个答案:

答案 0 :(得分:2)

创建用户时的序列'\Y'只是'Y'。所以用户的密码是“Y”。

在MySQL字符串文字中,only certain backslash-codes have any special meaning。 “\ n”例如是换行符。当你在大多数字符之前放一个反斜杠时,它没有特殊含义,它只是相同的文字字符。所以“\ Y”只是“Y”。

如果要将文字反斜杠作为密码的一部分,则需要转义反斜杠。因此,要创建一个密码,即两个字符“\ Y”,您需要:

mysql> create user 'test'@'localhost' identified by '\\Y';

然后在键入密码时,使用一个反斜杠。

,在交互式输入密码时,反斜杠完全没有意义