Как сделать MySQL запросы на текст с помощью умлаутов в Drupal? - PullRequest
2 голосов
/ 17 сентября 2010

Мне нужно различать узлы, начинающиеся с 'O', и узлы, начинающиеся с 'Ö' (o umlaut).

Проблема в том, что, поскольку таблица узлов и столбец заголовка имеют параметры сортировки utf8_general_ci, MYSQL не обрабатывает o и ö umlaut по-разному, и этот запрос возвращает узлы, начинающиеся с узлов O и, начинающиеся с ...

SELECT node.nid AS nid
ОТ узла AS узел
ГДЕ node.status <> 0
AND SUBSTR (node.title, 1, 1) = 'O'

Поскольку все модули Drupal используют сортировку utf8_general_ci, я думаю, что изменение сортировки таблицы и всей базы данных, вероятно, не очень хорошая идея.

Какой хороший обходной путь для этого?

Ответы [ 2 ]

2 голосов
/ 19 сентября 2010

К сожалению, как вы заметили, Drupal 6 применяет параметры сортировки utf8_general_ci.

Однако это известная проблема, и люди работают над тем, чтобы разрешить указание параметров сортировки в settings.php: Параметры сортировки по умолчанию для базы данных не соблюдаются

В данный момент содержит исправление в этой проблеме ( # 90 ) для Drupal 6 в обзоре, которое добавляет эту возможность,После исправления все, что вам нужно сделать, это добавить:

$db_collation = 'utf8_swedish_ci`;

в ваш файл settings.php.

2 голосов
/ 17 сентября 2010

Вы можете сделать сравнение, используя сопоставление, отличное от того, которое используют столбцы:

mysql> SELECT 'foo'='föo' COLLATE 'utf8_general_ci';
1
mysql> SELECT 'foo'='föo' COLLATE 'utf8_swedish_ci';
0

(o и ö - разные буквы в шведском сопоставлении. Вы также можете использовать utf8_bin, если не хотите, чтобы любые разные символы соответствовали, даже разные случаи одного и того же письмо.)

Однако сравнение столбцов, в которых параметры сортировки не совпадают с параметрами сортировки каждого столбца, означает, что индексы использовать нельзя. Так что может быть эффективнее просто ALTER таблицы для более конкретной сортировки, которую вы хотите.

...