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

mysql-How to handle query search with \(backslash)?

我在 mysql table 中插入了一个列 backslash(\) 就像 user345 一样。但是当我在 table 值中看到我没有看到forward slash(\)。我刚看到 user12345

当我使用以下可能的方式查询 backslash(\) 刚刚插入的行时,我总是得到零记录。

select * from users where user='user12345'
select * from users where user='user345'
select * from users where user='user\12345'

当我将列值复制粘贴到记事本+时,我可以看到每个列值的末尾都有一个回车符。 user12345CRLF,截至目前我无法 update/remove 马车 return。但我想用回车 return 获取记录。我该怎么做?

我不想使用 like 查询,我想查询确切的用户名。我该怎么做?

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

Hitesh> update test set fname='user4';
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    |
+----------+
| user4 |
| user4 |
+----------+
2 rows in set (0.00 sec)

如果您不想将 \ 设置为转义字符,那么您可以启用 sql 模式 NO_BACKSLASH_ESCAPES。

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

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

Hitesh> select fname from test;
+----------+
| fname    |
+----------+
| user4 |
| user4 |
+----------+
2 rows in set (0.00 sec)

对于回车 return 到列末尾的情况,在查询中可以在 where 子句中找到以 \r 结尾的字符串,并且 select 列可以跳过最后一个字符 \ 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)

再次感谢@Hitesh、@Barmar。我想出了精确匹配搜索的查询。 select * from users where user='user12345\r'