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コマンドの効果は何ですか?
デフォルトの文字セットと既存の列の文字セットを含むテーブルの照合を変更するには( convert to句に注意してください):
alter table <some_table> convert to character set utf8mb4 collate utf8mb4_unicode_ci;
いくつかのコメントのプロンプトのおかげで、答えを編集しました:
utf8の推奨は避けてください。それはあなたが望むものになることはほとんどなく、しばしば予期しない混乱につながります。utf8文字セットはUTF-8と完全には互換性がありません。utf8mb4文字セットは、UTF-8が必要な場合に必要なものです。–リッチレマー2018年3月28日23:41
と
それは非常に重要なようです。コメントを読んでよかったです。@RichRemerに感謝します。ニッキ、これがいくつのビューを取得するかを考慮して、あなたはあなたの答えでそれを編集するべきだと思います。ここhttps://dev.mysql.com/doc/refman/8.0/en/charset-unicode-utf8.htmlとここを参照してくださいMySQLのutf8mb4とutf8文字セットの違いは何ですか?–Paulpro3月12日17:46
MySQLには、サーバー、データベース、テーブル、列の4つの照合レベルがあります。サーバー、データベース、またはテーブルの照合を変更する場合、各列の設定は変更しませんが、デフォルトの照合を変更します。
たとえば、データベースのデフォルトの照合を変更すると、そのデータベースに作成する新しいテーブルごとにその照合が使用され、テーブルのデフォルトの照合を変更すると、そのテーブルに作成する各列にその照合が適用されます。
テーブルのデフォルトの照合を設定します。新しい列を作成する場合は、latin_general_ciと照合する必要があります-私は思います。個々の列の照合を指定して、それが機能するかどうかを確認してください。MySQLは、これを処理する方法に関して、いくつかの非常に奇妙な動作をします。
テーブルだけでなくスキーマを変更する必要があるかもしれません
ALTER SCHEMA `<database name>` DEFAULT CHARACTER SET utf8mb4 DEFAULT COLLATE utf8mb4_unicode_ci ;
リッチが言ったように-utf8mb4
(mariaDB 10)