サーチ…


宣言

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;

CityCountryUTF8を使用します。これは、これをテーブルのデフォルトの文字セットとして設定します。一方、 StreetASCIIを使用します。具体的にはそうしています。

正しい文字セットを設定することは、データセットに大きく依存しますが、データを扱うシステム間の移植性を大幅に向上させることもできます。



Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow