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

时间:2015-06-26 16:05:23

标签: mysql mysql-error-1064

我在backslash(\) user\12345中插入了一个列在mysql表中。但是当我在表中看到值时,我没有看到forward slash(\)。我刚看到 user12345

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

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

当我复制将列值粘贴到记事本中时+我可以看到每个列值的末尾都有一个回车符。 user12345CRLF,截至目前我无法更新/删除回车。但我想用回车来获取记录。我怎么能这样做?

我不想使用类似的查询,我想查询确切的用户名。我怎么能这样做?

2 个答案:

答案 0 :(得分:0)

反斜杠字符\用于转义序列。当您插入像'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_BACKSLASH_ESCAPES。

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)

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

答案 1 :(得分:0)

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