mysql如何使用\(反斜杠)处理查询搜索?

mysql如何使用\(反斜杠)处理查询搜索?,mysql,mysql-error-1064,Mysql,Mysql Error 1064,我在mysql表中插入了一列,带有反斜杠(\)类似user\12345。但是当我在表中看到值时,我没有看到正斜杠(\)。我只是看到用户12345 当我用反斜杠(\)用以下可能的方法查询刚刚插入的行时,我总是得到零记录 select * from users where user='user12345' select * from users where user='user\12345' select * from users where user='user\\12345' 当我将列值复制粘

我在mysql表中插入了一列,带有
反斜杠(\)
类似
user\12345
。但是当我在表中看到值时,我没有看到
正斜杠(\)
。我只是看到用户12345

当我用
反斜杠(\)
用以下可能的方法查询刚刚插入的行时,我总是得到零记录

select * from users where user='user12345'
select * from users where user='user\12345'
select * from users where user='user\\12345'
当我将列值复制粘贴到notepad+中时,我可以看到每个列值的末尾都有一个回车符。user12345CRLF,到目前为止,我无法更新/删除回车符。但我想用回车取记录。我该怎么做


我不想使用like查询,我想查询确切的用户名。如何执行此操作?

反斜杠字符\用于转义序列。当您插入像“user\12345”这样的值时,默认情况下mysql服务器将其作为“\1”作为转义字符,但它不是任何特殊字符,因此它会从字符串中丢弃\

Hitesh> update test set fname='user\344';
Query OK, 2 rows affected (0.06 sec)
Rows matched: 2  Changed: 2  Warnings: 0
Hitesh> select fname from test;
+---------+
| fname   |
+---------+
| user344 |
| user344 |
+---------+
2 rows in set (0.00 sec)
如果要以字符串形式存储\则应使用\

Hitesh> update test set fname='user\\344';
Query OK, 2 rows affected (0.03 sec)
Rows matched: 2  Changed: 2  Warnings: 0

Hitesh> select fname from test;
+----------+
| fname    |
+----------+
| user\344 |
| user\344 |
+----------+
2 rows in set (0.00 sec)
如果不想将\设置为转义字符,则可以启用sql模式NO\u backslax\u转义

Hitesh> SET sql_mode = 'NO_BACKSLASH_ESCAPES';
Query OK, 0 rows affected (0.00 sec)

Hitesh> update test set fname='user\344';
Query OK, 0 rows affected (0.00 sec)
Rows matched: 2  Changed: 0  Warnings: 0

Hitesh> select fname from test;
+----------+
| fname    |
+----------+
| user\344 |
| user\344 |
+----------+
2 rows in set (0.00 sec)
对于回车到列末尾的情况,在查询中,您可以在where子句中找到以\r结尾的字符串,并选择列,您可以跳过最后一个字符,\r

 Hitesh> set @@sql_mode='STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION';
 Query OK, 0 rows affected (0.00 sec)

 Hitesh> update test set fname='user344\r';
 Query OK, 2 rows affected (0.17 sec)
 Rows matched: 2  Changed: 2  Warnings: 0  

 Hitesh> select left( fname, CHAR_LENGTH(fname)-1) as fname from test where fname like '%\r';
    +---------+
    | fname   |
    +---------+
    | user344 |
    | user344 |
    +---------+
    2 rows in set (0.00 sec)

再次感谢你,希特斯,巴尔马。我找到了精确匹配搜索的查询<代码>从user='user12345\r'所在的用户中选择*

您是如何插入\字符的?(这是反斜杠,不是正斜杠)
SELECT*FROM users
是否显示字符?如果错误地将其理解为转义字符,则可能未以开头插入。除非在插入时转义了反斜杠,否则反斜杠将被视为仅转义其后面的字符,它将不会插入表中。
select*from users='user\\12345'
对我来说很好。您确定有一个名为user\12345的用户吗?请尝试
像“user%12345”这样的用户,您在那里看到了吗?没有。从用户中选择*不会显示任何反斜杠。它只是显示为user12345,而不是user\12345。但当我插入带有双反斜杠的列时,同一个表显示了反斜杠,如user\\12345。谢谢Hitesh。在我的例子中,有一个回车符被附加到了最后一列。如何提取结尾有回车值的列。@user505047为什么不使用类似“从测试中选择fname,其中fname类似“%\r”;”的查询,非常感谢您的帮助。当我的表中有转义序列时,不能执行精确匹配选择而不是类似查询?我想执行精确匹配搜索而不是类似搜索,在这种情况下可能吗?再次感谢大量Hitesh。我找到了精确匹配搜索的查询。从用户中选择*,其中user='user12345\r'