mysql密码中的特殊字符

mysql密码中的特殊字符,mysql,special-characters,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): Acces

我在使用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

有什么线索可以解释为什么会发生这种情况吗?

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

在MySQL字符串文本中。例如“\n”是一个换行符。当你把反斜杠放在大多数字符之前时,它没有特殊意义,它只是同一个文字字符。所以“\Y”就是简单的“Y”

如果希望在密码中包含文字反斜杠,则需要转义反斜杠。因此,要创建两个字符“\Y”的密码,您需要:

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

然后在键入密码时,使用一个反斜杠。当以交互方式键入密码时,反斜杠没有任何意义,因此没有必要逃避它。

似乎你是对的,但我不得不说它感觉坏了!要是我能把那个答案投一千次就好了!