mysqlのutf 8文字セットと標準UTF-8の違い

2113 ワード

字面的には非常に似ているがmysqlのutf-8のカバー範囲はすべてのUTF-8文字セットの一部にすぎない.これは初心者を誤解しやすい.
UTF-8はUCS文字セットの符号化方式であり、1文字を1バイト、2バイト、3バイト、または4バイトに符号化することができる.
1バイト符号化された文字はASCII符号(latin文字記号と呼ばれることもある)であり、ラテン文字、数字、句読点などラテン言語で用いられる記号が含まれている.
2バイトにエンコードされた文字には、ギリシャ語、ヘブライ語、アルメニア語、アラビア語、シリア語など、ヨーロッパおよび中東地域の言語で使用される記号が含まれます.
3バイトにエンコードされた文字には、中国語や日本語、韓国語などアジア言語で使われる記号が含まれています.
4バイトに符号化された文字には、表情記号などの特殊な記号が含まれています.
日常的に使われているほとんどの記号は、最初の3つに含まれています.この3つの組み合わせはunicode符号化空間の最初の平面を占めている.Unicodeには全部で17の平面があります.最初の平面はBasic Multilingual Planeと呼ばれ、BMPと略称され、2^16=65536個の符号化が含まれている.これらの符号化には、日常的に使用される様々な可視シンボル、可視および非可視制御シンボル、UTF−16符号化拡張のための特殊シンボル、いくつかのプライベート用途シンボル、および少数の未割り当てシンボルが含まれている.
mysqlのutf 8文字セットはunicodeに対応するBMP平面である.すべてのBMP文字を格納するために使用できます.BMP文字はUTF-8符号化で最大3バイトを占めるため、mysqlはchar(n)データ型に記憶領域を割り当てる際に3*nバイトを予約した空間である.
UTF-8を4バイトにエンコードしない文字を適用した場合は、問題ありません.しかし、使用した場合は、mysqlが5.5バージョンから提供する別の文字セット:utf 8 mb 4(文字通りmulti-byte-4の意味でしょうか?)を使用する必要があります.この文字セットはutf 8の3バイトの制限問題を解決し、4バイトを占めるunicode文字、すなわち現在ではすべてのunicode文字を格納することができるようになった.また、既存のutf 8には、uft 8 mb 3(元のutf 8を使用することができます)という新しい名前があります.
1つの4バイトUTF-8文字の例は、macまたはiOSデバイスに文字を入力する際の特殊文字であり、ピンイン入力kongを使用する場合、代替としてunicode番号が1 F 233、UTF-8符号化がF 0 9 F 88 B 3(4バイト)、UTF-16符号化がD 83 C DE 33(16ビットユニット2つを占有し、4バイト)である非漢字のグラフィック文字がある.この文字はmysqlのutf 8文字セットに格納できません.utf 8 mb 4を使用する必要があります.
参考記事:https://mathiasbynens.be/notes/mysql-utf8mb4
注意:
既存のテーブルの文字セットをutf 8からutf 8 mb 4に変更してBMP範囲外のunicode文字をサポートするには、次の手順に従います.
1)表のデフォルト文字セットの設定を変更するには、次の手順に従います.
alter table xxx set default character set = utf8mb4;
alter table xxx convert to character set utf8mb4;
2)全ライブラリのデフォルト文字セットも変更したい場合は、次のことができます.
alter database xxx set default character set = utf8mb4;
3)my.cnfのサーバデフォルト文字セット設定
server_character_set = utf8mb4
mysqlドキュメントでは、この設定が新しいデータベースの作成時に新しいデータベースのデフォルト文字セットを選択することにのみ影響するため、既存のデータベースを変更するには値を変更する必要はありません(mysqlサーバに多くのデータベースがあると思いますが、utf 8 mb 4を有効にしたいだけです).しかし、実際の使用から見ると、この構成をutf 8 mb 4にしなければならない.具体的な原因はまだ分からない.この変数は
使用する
データベース接続を確立するデフォルトの文字セットを適用しますか?
4)mysqlサービスを再起動します.必要なのは私たちがmyを変えたからだ.cnfでの構成