web-dev-qa-db-ja.com

テーブルのデフォルトの照合を変更するには?

create table check2(f1 varchar(20),f2 varchar(20));

デフォルトの照合latin1_general_ciでテーブルを作成します。

alter table check2 collate latin1_general_cs;
show full columns from check2;

列の個々の照合を「latin1_general_ci」として表示します。

次に、alter tableコマンドの効果は何ですか?

169
dharm0us

既存の列のものを含むテーブルのデフォルトの文字セットと照合順序を変更するにはconvert to句):

alter table <some_table> convert to character set utf8mb4 collate utf8mb4_unicode_ci;

いくつかのコメントのプロンプトのおかげで、答えを編集しました:

Utf8の推奨は避けてください。それはほとんどあなたが望むものではなく、しばしば予期しない混乱につながります。 utf8文字セットはUTF-8と完全に互換性がありません。 utf8mb4文字セットは、UTF-8が必要な場合に必要なものです。 -リッチレマー18年3月28日23:41に

そして

コメントを読んでくれてありがとう@RichRemer Nikki、これがどのくらいのビューを獲得するかを考慮して、回答でそれを編集する必要があると思います。ここを参照してください https://dev.mysql.com/doc/refman/8.0/en/charset-unicode-utf8.html およびここを参照してください MySQL? – Paulpro 3月12日17:46

554

MySQLには、サーバー、データベース、テーブル、列の4つの照合レベルがあります。サーバー、データベース、またはテーブルの照合順序を変更する場合、各列の設定は変更しませんが、デフォルトの照合順序は変更します。

たとえば、データベースのデフォルトの照合順序を変更すると、そのデータベースで作成する新しい各テーブルはその照合順序を使用し、テーブルのデフォルトの照合順序を変更すると、そのテーブルで作成する各列はその照合順序を取得します。

32
fredrik

テーブルのデフォルトの照合を設定します。新しい列を作成する場合、latin_general_ciと照合する必要があります。個々の列の照合を指定してみて、それが機能するかどうかを確認してください。 MySQLは、これを処理する方法に関していくつかの本当に奇妙な動作をします。

9
Don Werve

テーブルだけでなく、スキーマの変更が必要になる場合があります

ALTER SCHEMA `<database name>`  DEFAULT CHARACTER SET utf8mb4  DEFAULT COLLATE utf8mb4_unicode_ci (as Rich said - utf8mb4);

(mariaDB 10)

1
AssyK