MySql неправильно сравнивает строки utf-8? - PullRequest
1 голос
/ 20 января 2011

Я знаю, это звучит странно, но посмотрите на это:

mysql> select * from tbl_list_charset where word='aê';
+------+
| word |
+------+
| aª  | 
+------+

Данные поступают из файла со строками utf-8, который программа python читает и вставляет в таблицу. Поскольку столбец word определен как уникальный, вставка завершается неудачно.

Представление utf-8 строк в файле:

aê = 61 C3 AA
aª = 61 C2 AA

Моя среда: linux, python 2.6.4, версия сообщества mysql 5.0.77

Я совершенно уверен, что это не ошибка, но я не понимаю, что я делаю неправильно ...

Ответы [ 2 ]

1 голос
/ 20 января 2011

Сортировка определяет, какие символы сравниваются как "равные".И да, таких ситуаций довольно много.Вы можете попробовать сортировку utf8_bin, и у вас не возникнет этой проблемы, но она будет чувствительна к регистру.Параметры сортировки бина строго сравниваются, отделяются только символы в соответствии с выбранной кодировкой, и после того, как это сделано, сравнения выполняются на двоичной основе, во многом как в сложных языках программирования сравниваются строки.между этой крайностью и вашим текущим сопоставлением вы можете сделать собственное сопоставление.Или, возможно, вы сможете получить его «достаточно хорошо», сохранив другой столбец и применив к нему другое сопоставление и просто каждый столбец для определенных целей.

1 голос
/ 20 января 2011

Используете ли вы также UTF-8 с клиентской программой mysql, а также с вашим приложением Python?
Т.е. вызов mysql --default-character-set=utf8 и в выпуске Python как минимум один SET NAMES='utf8' перед выполнением любых других запросов?1005 *

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...