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を使用します。具体的にはそうしています。
正しい文字セットを設定することは、データセットに大きく依存しますが、データを扱うシステム間の移植性を大幅に向上させることもできます。