MySql 5.6:在查询中转义连续百分号

时间:2015-04-14 12:43:57

标签: mysql

考虑2个查询:

SELECT * FROM T1 WHERE NAME LIKE '%\%%';

SELECT * FROM T1 WHERE NAME LIKE '%\%\%%';

假设T1包含NAME%%%%%%的记录。

我希望第二个查询返回更少的结果,但它包含T1.NAME = '%'的记录!有没有办法使用类似查询过滤掉该记录?像SELECT * FROM T1 WHERE NAME LIKE '%\%\%%' AND NAME <> '%';这样的东西不是我想要的。

mysql> explain table1;
+-------+------------+------+-----+---------+-------+
| Field | Type       | Null | Key | Default | Extra |
+-------+------------+------+-----+---------+-------+
| id    | int(11)    | YES  |     | NULL    |       |
| text  | varchar(4) | YES  |     | NULL    |       |
+-------+------------+------+-----+---------+-------+
2 rows in set (0.00 sec)

mysql> explain select * from table1
    -> where text like '%\%%';
+----+-------------+--------+------+---------------+------+---------+------+------+-------------+
| id | select_type | table  | type | possible_keys | key  | key_len | ref  | rows | Extra       |
+----+-------------+--------+------+---------------+------+---------+------+------+-------------+
|  1 | SIMPLE      | table1 | ALL  | NULL          | NULL | NULL    | NULL |    4 | Using where |
+----+-------------+--------+------+---------------+------+---------+------+------+-------------+
1 row in set (0.00 sec)

mysql> explain select * from table1
    -> where text like '%\%\%%';
+----+-------------+--------+------+---------------+------+---------+------+------+-------------+
| id | select_type | table  | type | possible_keys | key  | key_len | ref  | rows | Extra       |
+----+-------------+--------+------+---------------+------+---------+------+------+-------------+
|  1 | SIMPLE      | table1 | ALL  | NULL          | NULL | NULL    | NULL |    4 | Using where |
+----+-------------+--------+------+---------------+------+---------+------+------+-------------+
1 row in set (0.00 sec)

如果有帮助,这是我的配置:

[mysqld]
innodb_buffer_pool_size=402653184
innodb_log_file_size=262144000
innodb_log_buffer_size=8388608
max_allowed_packet=5241856
innodb_additional_mem_pool_size=20971520

我需要进一步调查,但问题似乎与数据库的创建方式有关:

create database testdb character set utf8 collate utf8_unicode_ci;

当我以不太具体的方式创建数据库时,我能够得到正确的结果:

create database testdb;

知道为什么吗?

0 个答案:

没有答案