База данных запросов для слова, содержащего французский акцент - PullRequest
0 голосов
/ 25 мая 2018

В моей базе данных есть таблица, похожая на эту

id  |  name     |  email
-----------------------------------------
1   |  elie     |  elie@company.com
2   |  jénifer  |  jenifer@company.com
3   |  jenny    |  jenny@company.com

, поскольку вы можете видеть, что запись с ID = 2 имеет в названии французский символ.при запуске этого SQL

SELECT * FROM `TABLENAME` WHERE `name` LIKE '%jé%'

я ожидаю увидеть только запись с ID = 2.Вместо этого я получаю ID = 2 & ID = 3.SQL заменяет французский символ «é» на «e».

Моя база данных, таблица и поля имеют Collation = utf8_general_ci

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

Ответы [ 2 ]

0 голосов
/ 25 мая 2018

Используйте для него REGEXP

SELECT * FROM `TABLENAME` WHERE `name` REGEXP '.*é.*'

LIKE игнорирует диакритические знаки, а REGEXP - нет.

0 голосов
/ 25 мая 2018

Я обнаружил, что его известная ошибка в mysql 5.1

Ошибка MySQL

[1 ноября 2010 8:52] Питер Лаурсен Итак, вы можете создатьтаблица как эта

CREATE TABLE test (
 id INT AUTO_INCREMENT,
 vers TEXT,
 PRIMARY KEY (id)
) CHARACTER SET utf8 COLLATE utf8_danish_ci;

или эта

CREATE TABLE `test` (
 `id` INT (11) NOT NULL AUTO_INCREMENT,
 `vers` TEXT CHARACTER SET utf8 COLLATE utf8_danish_ci,
 PRIMARY KEY (`id`)
) ENGINE = INNODB DEFAULT CHARSET = utf8;

или

записывает запросы с предложением (ями) COLLATE, как описано здесь: http://dev.mysql.com/doc/refman/5.0/en/charset-collate.html

Обратите внимание, что оператор LIKE не поддерживает COLLATE.Он выполняется, но игнорируется.

SELECT 'a' LIKE 'å' COLLATE utf8_danish_ci; -- '0'

(что, я думаю, я сообщу как об ошибке, по крайней мере, как запрос документа)

...