web-dev-qa-db-ja.com

MySQL照合順序:latin1_swedish_ciとutf8_general_ci

MySQLでテーブルを作成するときに照合順序に何を設定する必要がありますか?

  • latin1_swedish_ciまたはutf8_general_ci

とにかく照合とは何ですか?

latin1_swedish_ciを使用していますが、問題が発生しますか?

18
laukok

何をするにしても、mysqlでデフォルトのswedish_ci照合順序を(ラテン語ではなく)utf8で使用しようとしないでください。そうしないと、エラーが発生します。照合順序は、機能するために適切な文字セットとペアにする必要があります。文字セットと照合順序が一致しないため、このSQLは失敗します。

CREATE  TABLE IF NOT EXISTS `db`.`events_user_preference` (
  `user_id` INT(10) UNSIGNED NOT NULL ,
  `email` VARCHAR(40) NULL DEFAULT NULL ,
  PRIMARY KEY (`user_id`) )
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8
COLLATE = latin1_swedish_ci

そして@Blaisorbladeは、これを修正する方法は、スウェーデンの照合に対応する文字セットを使用することであると指摘しました。

DEFAULT CHARACTER SET = utf8_swedish_ci

Yii phpフレームワークのcal(calendar)モジュールのSQLには、上記の誤ったコードに似たものがありました。うまくいけば、彼らは今までにそれを修正しました。

6
hobs

MySQL 5.5以降の文字セットと照合順序については、次の場所で読むことができます。
一般的な文字セットと照合順序
MySQLの文字セットと照合順序

照合サポートは、世界中の多くの書記言語すべてをサポートするために必要です。たとえば、私の言語(デンマーク語)では、特別な文字「æ」があります。スウェーデン語、ドイツ語、ハンガリー語(およびその他)のように聞こえます 'ä'。その文字は、それらの言語の1つからインポートされた単語とともにデンマーク語でも表示されます。照合順序のサポートにより、正しく印刷することも、同じように並べ替え(ORDER BY ...)することもできます。照合サポートがなければ、それは不可能でした。

スウェーデン語の照合順序は、ラテン語の文字セットのMySQLのデフォルトです。英語でも問題なく動作します。英語はとても簡単です。特殊文字やアクセントなどがないため、すべてで機能します。ただし、頻繁に使用する別の言語(スペイン語など)がある場合は、照合順序をスペイン語に変更できるため、スペイン語の文字列を並べ替えると、スペイン語の規則に従って正しいこと。

照合の非常に特別な例は、ドイツの照合の1つです。ドイツの電話帳のように並べ替えることができるように作成されました。ドイツの電話帳はドイツ語の一般的な規則に従っていません!

必要に応じて、独自の照合を作成できます。照合はコンパイルまたはテキスト形式で行うことができます。

4
aalanna