Почему этот SQL запрос не возвращает только одну запись (проблема utf8)? - PullRequest
0 голосов
/ 21 февраля 2020

Если я выполняю запрос SQL, подобный этому, на моей базе данных:

 SELECT * FROM tablename WHERE fieldname LIKE "%ác%";

это строки, которые он возвращает:

query results

Очевидно, я хочу только вторую запись. Я добавил в файл my.cnf следующие строки:

[client]

default-character-set = utf8mb4

[mysql]
default-character-set = utf8mb4

[mysqld]
character-set-client-handshake = FALSE
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci

, и моя база данных была создана следующим образом:

CREATE DATABASE database name CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;

, и она все еще не работает, так как должна работать.

Ответы [ 2 ]

0 голосов
/ 22 февраля 2020

Согласно всем сопоставлениям utf8mb4, кроме 'icelandi c' и 'bin', a = á. Это включает в себя utf8mb4_spanish2_ci и utf8mb4_spanish_ci.

utf8mb4_spanish2_ci обрабатывает ch и ll как «отдельные буквы», в отличие от большинства сопоставлений. Вам это нужно?

Оба испанских sh сопоставления обрабатывают ñ в отличие от n.

Подробнее: http://mysql.rjweb.org/utf8mb4_collations.html

utf8mb4_0900_as_ci является «чувствительным к акценту» (как вы и просили) и «нечувствительным к регистру». Может быть, это то, что вам нужно?

Пожалуйста, предоставьте более подробную информацию, чтобы мы могли помочь вам в дальнейшем.

0 голосов
/ 21 февраля 2020

Очевидно, это как. Вы можете использовать INSTR() вместо точного включения строки.

SELECT * FROM (
SELECT 'caracteres ingleses' COLLATE utf8mb4_unicode_ci fieldname
UNION ALL
SELECT 'carácteres no ingles' COLLATE utf8mb4_unicode_ci
    ) A
-- WHERE fieldname LIKE '%ác%'
WHERE INSTR(fieldname, 'ác')
;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...