MySQL запрос возвращает 0 строк при поиске значения с точкой (.) В строке - PullRequest
1 голос
/ 07 декабря 2011

Если я пытаюсь найти значение в базе данных mysql, а строковое значение содержит точку, запрос возвращает 0 строк.Пример:

SELECT * FROM table WHERE `username`='marco.polo'  --> 0 rows
SELECT * FROM table WHERE `username` LIKE '%.polo%'  --> 0 rows
SELECT * FROM table WHERE `username` LIKE 'polo'  --> Success

Это появилось после перемещения сервера и базы данных в другое место.Я знаю, что точка - это набор расширенных регулярных выражений, но она не должна применяться к операциям равенства или LIKE, просто потому, что я не использую REGEXP в запросе.

Я тестировал тот же запрос на своем локальномбаза данных и работает нормально.Может ли быть в MySQL специальный параметр, который обрабатывает точку иначе, чем обычно?

Ответы [ 3 ]

1 голос
/ 31 июля 2015

Поскольку @ cen уже упоминалось, набор символов может вызвать эту проблему.У меня был такой пример:

`email` VARCHAR(45) CHARACTER SET 'armscii8' NOT NULL,

это было в дампе .sql, который я получаю.

Итак, когда я пытался получить объект с помощью этого электронного письма, я не смогполучите это.

1 голос
/ 07 декабря 2011

user1084605, я попытался воспроизвести проблему (используя MySQL версии 5.1.37), но получил абсолютно противоположные результаты, как вы.См. Ниже:

mysql> create table test (username varchar(100));
Query OK, 0 rows affected (0.01 sec)

mysql> insert into test values ('marco.polo');
Query OK, 1 row affected (0.00 sec)

mysql> SELECT * FROM test WHERE `username`='marco.polo';
+------------+
| username   |
+------------+
| marco.polo | 
+------------+
1 row in set (0.00 sec)

mysql> SELECT * FROM test WHERE `username` LIKE '%.polo%';
+------------+
| username   |
+------------+
| marco.polo | 
+------------+
1 row in set (0.00 sec)

mysql> SELECT * FROM test WHERE `username` LIKE 'polo';
Empty set (0.00 sec)

Согласно документации MySQL, единственными специальными символами при использовании оператора LIKE являются «%» (проценты: соответствует 0, 1 или много символов) и «_» (подчеркивание:соответствует одному и только одному символу).http://dev.mysql.com/doc/refman/5.0/en/string-comparison-functions.html

A "."(точка) имеет особое значение для оператора MySQL REGEXP, но он все равно должен соответствовать буквальному периоду в вашем столбце.http://dev.mysql.com/doc/refman/5.0/en/regexp.html

Можете ли вы скопировать операторы SQL, которые я запускал выше, и вставить свои результаты в ответ?

0 голосов
/ 03 декабря 2014

В приведенном ниже запросе рассматривается сценарий, когда в столбцах есть только оператор DOT .

 SELECT * FROM test WHERE `username` LIKE '%.%';
...