web-dev-qa-db-ja.com

ドイツ語に最適なMySQL照合順序は何ですか

私はドイツ語でウェブサイトを構築しているので、ä, ü, ßなどの文字を使用します。では、あなたの推奨事項は何ですか?

23
TooCooL

この答えは時代遅れです。絵文字の完全なサポートについては、 この回答 を参照してください。

文字セットとして、可能であれば、間違いなくUTF-8です。

照合として-それは特殊文字を持つ言語にとっては少し厄介です。照合にはさまざまな種類があります。それらはすべてすべてのウムラウトと他のキャラクターを保存できますが、比較でウムラウトをどのように扱うか、つまり、

u = ü 

真または偽です。および並べ替え(アルファベットのウムラウトは並べ替え順序で配置されます)。

長い話を短くするために、あなたの最善の策はどちらかです

utf8_unicode_ci

大文字と小文字を区別しない検索が可能です。 ßssとして扱い、DIN-1ソートを使用します。悲しいことに、すべての非バイナリUnicode照合と同様に、「Muller」を検索すると「Müller」も返されるため、これはひどい迷惑であるu = üを扱います。ウムラウト対応の照合順序をリアルタイムで設定することで、これを回避する必要があります。

またはutf8_bin

この照合にはu = üの問題はありませんが、大文字と小文字を区別する検索のみが可能です。

バイナリ照合を使用することに他の副作用があるかどうかは完全にはわかりません。私はそれについて質問しました ここ


このmySQLマニュアルページ は、さまざまな照合順序と、それらが日常の使用にもたらす結果の概要を示しています。

ここ はmySQLで利用可能な照合の一般的な概要です。

27
Pekka

完全なUTF-8標準をサポートするには、MySQLで文字セットutf8mb4と照合順序utf8mb4_unicode_ciを使用する必要があります。

注: MySQLは、いわゆるutf8文字セットを使用する場合、1〜3バイトの文字のみをサポートします。これが、4バイトを使用する最新の絵文字がサポートされていない理由です。

UTF-8標準を完全にサポートする唯一の方法は、ALL tablesおよびdatabase自体の文字セットと照合順序をutf8mb4utf8mb4_unicode_ciに変更することです。さらに、データベースconnectionもutf8mb4を使用する必要があります。

Mysqlサーバーは、デフォルトの文字セットとしてutf8mb4を使用する必要があります。これは、/ etc/mysql/conf.d /mysql.cnfで手動で構成できます。

[client]
default-character-set = utf8mb4

[mysql]
default-character-set = utf8mb4

[mysqld]
# character-set-client-handshake = FALSE  ## better not set this!
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci

次のSQLステートメントを使用して、既存のテーブルをutf8mb4に移行できます。

ALTER TABLE <table-name> CONVERT TO 
CHARACTER SET utf8mb4 
COLLATE utf8mb4_unicode_ci;

注意:

  • テーブル列間のJOINがcharsetエンコーディングによって遅くならないようにするには、すべてのテーブルを変更する必要があります。
  • MySQLではインデックスの長さが制限されているため、インデックス行あたりの合計文字数に4バイトを掛け、3072未満にする必要があります。

Innodb_large_prefix構成オプションが有効になっている場合、DYNAMICおよびCOMPRESSED行フォーマットを使用するInnoDBテーブルの場合、この長さ制限は3072バイトに引き上げられます。

データベースの文字セットとデフォルトの照合順序を変更するには、次のコマンドを実行します。

ALTER DATABASE CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

Utf8mb4はutf8と完全な下位互換性があるため、文字化けやその他の形式のデータ損失は発生しません。

11
Roland

utf-8-general-ciまたはutf-8-unicode-ci

違いを知るには: TF-8:General?Bin?Unicode?

3
Sandro Munda