それはMySQLのために、すべてのCHAR、VARCHAR、およびテキスト列に冗長照合宣言を含めるために、テーブルのステートメントを作成する正常ですか?

レオGalleguillos:

実行しているときSHOW CREATE TABLE `my_table`;、私はそれに気づくCOLLATE utf8mb4_unicode_ciすべてのために示されているcharvarchartextテーブルの列。照合がすでに宣言されているので、これはビットの冗長を思わtable_optionの作成文の一部。

mysql> SHOW CREATE TABLE `my_table`;
| Table    | Create Table
| my_table | CREATE TABLE `my_table` (
...
  `char_col_1` char(15) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
  `varchar_col_1` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
  `varchar_col_2` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  `varchar_col_3` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  `text_col_1` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci
...
) ENGINE=InnoDB AUTO_INCREMENT=1816178 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci

この動作は、両方のMySQL 5.7とMySQL 8.0、したがって、最も可能性が高いだけでなく、他のバージョンではで顕著です。

この動作は正常で受け入れられるか、テーブル、データベース、またはMySQLインスタンスのいずれかで間違って設定された何かの症状ですか?

照合が個別に任意の特定の列に設定することができるので一方、おそらく明示的に列の照合順序は、テーブルの照合と一致しても、場合によっては任意の曖昧さや仮定を、避けるために、列ごとに照合を表示することをお勧めします?

リック・ジェームス:

あなたは氷山の一角に触れてきました。

  • 私はテーブルの上の設定は、文字セットや、コレートなしで定義されている列のためだけのデフォルトだと思います。
  • 以下のための同上ALTER TABLE ADD COLUMN-は、テーブルのデフォルトから継承します。
  • 私は、列の設定が投入されていることを考えるinformation_schema.COLUMNSテーブルとそれがで変更されませんALTER TABLE .. MODIFY COLUMN ..

同様に、表の文字セットと照合が継承データベースの定義、およびテーブルが定義されているように凍結されます。

デフォルトについて:

  • 古いデフォルトの文字セットでした latin1
  • 現在のデフォルトですutf8mb4これは今までに、将来的に変更することはほとんどありません。
  • すべての照合は、1つの文字セットに適用され、文字セット名は、照合名の始まりです。
  • 各文字セットは、1つの「デフォルト」の照合を持っている: latin1_swedish_ciutf8_unicode_ciutf8mb4_0900_ai_ci、など
  • これまでに、変更された場合(特定の文字セット用)はデフォルトの照合は、めったにありません。おそらく唯一の変化は5.7と8.0の間utf8mb4のためになっています?

(より多くのI実験、すべてこの程度少ない特定のI AM。)

ベストプラクティス:常に明示的に設定CHARSETし、COLLATE各文字列の列に。

二次的考察:

  • 使用utf8mb4可能な場合、ほとんどの文字列(VARCHAR/ TEXT)。
  • (Unicodeはそれを改善し続けて)利用可能な最新の照合を使用します。現在utf8mb4_0900_ai_ci
  • 使用するascii国コード、POSTAL_CODE、六角など主にこれらの缶を使用-明確にASCIIだけあるもののためにCHAR(..)
  • 使用ascii_general_ciまたはascii_bin、あなたはケースの折り畳みを必要とするかどうかに応じて。

おすすめ

転載: http://10.200.1.11:23101/article/api/json?id=6169&siteId=1