2013-06-25 3 views
1

У меня есть база данных, с которой я управляюсь с phpMyAdmin. У меня есть таблица для сохранения verb tense и verb. Похоже, что это следующим образом:Как создать индекс с акцентом в MySQL

Column | Type  | Collation   | Attributes | Null | Default | Extra 
-------+-------------+-------------------+-------------+------+---------+------ 
form | varchar(50) | latin1_swedish_ci |    | No |   | 
verb | varchar(50) | latin1_swedish_ci |    | Yes | NULL | 

и я создал и индекс, чтобы иметь быстрый доступ:

Keyname  | Type | Unique | Packed | Column | Cardinality | Collation | Null | Comment 
------------+-------+--------+--------+--------+-------------+-----------+------+-------- 
verbs_index | BTREE | Yes | No  | form | 1   | A   |  | 
      |  |  |  | verb | 1   | A   | YES | 

Целью этого является, чтобы иметь связь между глаголом и всех его глаголов, напрягается (form), но проблема возникает, когда я пытаюсь вставить пару (form, verb) с акцентом, если форма без акцента уже существует. Это те же самые слова к MySql, и я получаю ошибку:

Duplicate entry 'form-verb' for key 'verbs_index'.

Я хотел бы вставить:

insert into verbs values('o','verb1'); (without accent) 
insert into verbs values('ó','verb1'); (with accent) 

Я смотрел на вещи и сортировки я уже пытался с каждым latin и utf8.

+0

Would [это сообщение] (http://stackoverflow.com/questions/500826/how-to-conduct-an-accent-sensitive-search-in-mysql) помочь? Не грустите, вы не одиноки с этой проблемой, которая не является ошибкой (хотя я нахожу ее странным поведением по умолчанию, но все же ...) –

ответ

0

Сравнение «без учета регистра» будет сравнивать строки, игнорирующие любые варианты. кейс конечно. Но он также будет игнорировать диакритические знаки. Так, например, o, O, Ô и ò считаются равными.

Чтобы узнать доступные параметры сортировки в вашей системе, используйте SHOW COLLATION:

mysql> SHOW COLLATION; 
+----------------------+----------+-----+---------+----------+---------+ 
| Collation   | Charset | Id | Default | Compiled | Sortlen | 
+----------------------+----------+-----+---------+----------+---------+ 
[...] 
| latin1_german1_ci | latin1 | 5 |   | Yes  |  1 | 
| latin1_swedish_ci | latin1 | 8 | Yes  | Yes  |  1 | 
| latin1_danish_ci  | latin1 | 15 |   | Yes  |  1 | 
| latin1_german2_ci | latin1 | 31 |   | Yes  |  2 | 
| latin1_bin   | latin1 | 47 |   | Yes  |  1 | 
| latin1_general_ci | latin1 | 48 |   | Yes  |  1 | 
| latin1_general_cs | latin1 | 49 |   | Yes  |  1 | 
| latin1_spanish_ci | latin1 | 94 |   | Yes  |  1 | 
| latin2_czech_cs  | latin2 | 2 |   | Yes  |  4 | 
| latin2_general_ci | latin2 | 9 | Yes  | Yes  |  1 | 
| latin2_hungarian_ci | latin2 | 21 |   | Yes  |  1 | 
| latin2_croatian_ci | latin2 | 27 |   | Yes  |  1 | 
[...] 

Скажите, какие изменить таблицу сопоставления для latin1_general_cs (_cs для чувствительны к регистру - ну случай + акцентов и так далее):

mysql> ALTER TABLE verbs COLLATE latin1_general_cs; 
+0

Спасибо! Очень полезно! :) – aartor