MySQL UTF/Unicode 移行のヒント
-
09-06-2019 - |
質問
MySQL テーブルを、デフォルトの大文字と小文字を区別しないスウェーデン語または ASCII 文字セットから utf-8 に移行しようとするときに、注意すべきヒントや注意すべき点がある人はいますか?私が関わっているプロジェクトの中には、より良い国際化を目指して努力しているものもあり、データベースはこの変化の重要な部分を占めることになります。
データベースを変更する前に、すべての入出力で同じ文字セットが使用されるように、各サイトを UTF-8 文字エンコーディング (重要度の低いものから最も重要なものまで) に変換します。
助けてくれてありがとう
解決
いくつかのヒント:
- あなたの
CHAR
そしてVARCHAR
列は最大 3 倍のディスク容量を使用します。(スウェーデン語の単語では、おそらくディスク容量はあまり増えません。) - 使用
SET NAMES utf8
データベースの読み取りまたは書き込みの前に。これを行わないと部分的に文字化けが発生します。
他のヒント
答えを見つけるために、次のサイト/記事を参照してください。
すべてのソフトウェア開発者が絶対に、積極的に Unicode と文字セットについて知っておくべき絶対最低限のこと (言い訳はありません!) - Joel on Software
ヘンゼルミニッツのエピソード「マイケル・カプランとの国際化の整理」
また、これを書いているときに、Derek Sivers @ O'Reilly ONLamp Blog による非常に話題の投稿を見つけました。 latin1 の MySQL データを utf8 utf-8 に変換する
インデックスの長さの制限に注意してください。テーブルが構造化されている場合は、次のように言います。
A varchar(255)b varchar(255)key( 'a'、 'b')
キーの長さの制限 1000 バイトを超えようとしています。255+255 は問題ありませんが、255*3 + 255*3 は機能しません。
あなたの
CHAR
そしてVARCHAR
列は最大 3 倍のディスク容量を使用します。
128 を超える序数を持つ latin-1 がいっぱい詰め込まれている場合に限ります。それ以外の場合、UTF-8 のスペース使用量の増加は最小限に抑えられます。
照合順序は常に良好であるとは限りません。umlat が非 umlatted バージョンと照合されることになりますが、これは常に正しいとは限りません。utf8_bin を使用することもできますが、その場合はすべて大文字と小文字が区別されます。