MySQL
キャラクタセットと照合順序
サーチ…
宣言
CREATE TABLE foo ( ...
name CHARACTER SET utf8mb4
... );
接続
文字セットを使用するためには、クライアントのバイトがどのようなエンコーディングであるかをMySQLサーバに伝えることが不可欠です。これは一つの方法です:
SET NAMES utf8mb4;
各言語(PHP、Python、Java、...)には独自の方法がありますが、通常はSET NAMES
よりも好ましい方法です。
例えば: SET NAMES utf8mb4
、列宣言と共にCHARACTER SET latin1
-これは、ときutf8mb4するlatin1のから変換しますINSERTing
し、戻るときに変換SELECTing
。
どのキャラクターセットとコレクションですか?
何百もの照合を含む数十のキャラクタセットがあります。 (1つの照合は1つの文字セットにのみ属します) SHOW COLLATION;
出力を参照してくださいSHOW COLLATION;
。
通常は4つのCHARACTER SETs
のみが重要です。
ascii -- basic 7-bit codes.
latin1 -- ascii, plus most characters needed for Western European languages.
utf8 -- the 1-, 2-, and 3-byte subset of utf8. This excludes Emoji and some of Chinese.
utf8mb4 -- the full set of UTF8 characters, covering all current languages.
すべて英語の文字が含まれ、同じようにエンコードされます。 utf8はutf8mb4のサブセットです。
ベストプラクティス...
- utf8mb4は、さまざまな言語を使用できる
TEXT
列またはVARCHAR
列に使用します。 - 16進文字列(UUID、MD5など)とシンプルコード(country_code、postal_codeなど)にはascii(latin1はOK)を使用します。
utf8mb4はバージョン5.5.3まで存在しなかったので、utf8はそれ以前に利用可能な最高のものでした。
MySQLの外では 、 "UTF8"は、MySQLのutf8mb4ではなく、MySQLのutf8mb4と同じものを意味します。
照合順序は文字セット名で始まり、通常は "case and accent insensitive"の場合は_bin
、 "単純にビットを比較する"場合は_ci
で終わります。
「最新の」utf8mb4照合は、Unicode 5.20に基づくutf8mb4_unicode_520_ci
です。 1つの言語で作業している場合は、ポーランド語の規則に基づいて手紙を少し並べ替えるutf8mb4_polish_ci
が好きかもしれません。
表とフィールドの文字セットの設定
文字セットは、 CHARACTER SET
文とCHARSET
文を使用して、テーブルごと、および個々のフィールドごとに設定できます。
CREATE TABLE Address (
`AddressID` INTEGER NOT NULL PRIMARY KEY,
`Street` VARCHAR(80) CHARACTER SET ASCII,
`City` VARCHAR(80),
`Country` VARCHAR(80) DEFAULT "United States",
`Active` BOOLEAN DEFAULT 1,
) Engine=InnoDB default charset=UTF8;
City
とCountry
はUTF8
を使用します。これは、これをテーブルのデフォルトの文字セットとして設定します。一方、 Street
はASCII
を使用します。具体的にはそうしています。
正しい文字セットを設定することは、データセットに大きく依存しますが、データを扱うシステム間の移植性を大幅に向上させることもできます。