これは何度も聞かれることは知っていますが、照合とエンコーディングの違いを理解するのに苦労しています。
さて、混合照合のテーブルを持つMySQLデータベース(実際にはいくつか)があります。現在、一部の列はutf8_unicode_ci
であり、一部はデフォルトですlatin1_swedish_ci
。それ以来utf8_unicode_ci
、デフォルトとしてを使用しています。しかし、latin1には多くの「レガシー」列があります。
一貫性が必要であり、すべての列をutf8に変換したいと思います。幸い、データの99.9%は英語であり、(文字通り)スペイン語の住所(チルダ)を持つレコードがいくつかあります。とてもシンプルなことですが、私たちはそれを「正しい方法」で行い、あらゆる言語を完全にサポートしたいと考えています。したがって、utf8_unicode。
すべてのテーブルのすべての列を調べて、その変更を加える必要はありません。すべての列を変換する簡単なスクリプトはありますutf8_unicode_ci
か?
また、私たちが探す必要のあるいくつかの落とし穴は何ですか?つまり、私が間違っていて、ロシア語または日本語で私が知らないレコードがある場合、問題が発生しますか?
そして、これは副次的な質問かもしれませんが、エンコーディングには、UTF8の方が優れています。これは、任意の言語を格納できるからです。のように、各文字は、数千文字の「グローバル」アルファベットであるべきものを表す2バイトまたは4バイトになりますか?そのアナロジーが愚かに聞こえるが理解しようとしている場合は申し訳ありません。そして、照合は、私が照会するときにそれらがどのようにソートされるかということです。A8 9F
文字が文字H
とB3 2E
文字のように保存されている場合、e
前にH
来るので最初に来るのでしょうか?A8
B3
はぁ、頭が回転している。これが3つの異なる質問のように思われる場合は申し訳ありませんが、管理職に行って列を変換する必要があると言った場合、これが理由です。
ありがとう