2

phpMyAdmin で管理するデータベースがあります。と を保存するテーブルがありverb tenseますverb。次のようになります。

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 と同じ単語であり、エラーが発生します。

キー 'verbs_index' のエントリ 'form-verb' が重複しています。

挿入したい:

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

私は照合関係を見てきましたが、すでにすべてlatinのおよびで試しましutf8た。

4

1 に答える 1

1

「大文字と小文字を区別しない」照合では、あらゆる種類のバリエーションを無視して文字列が比較されます。ケースはもちろん。ただし、分音記号も無視されます。たとえば、oOÔおよびòは等しいと見なされます。

システムで利用可能な照合順序を知るには、次を使用し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;
于 2013-06-25T18:50:50.917 に答える