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コマンドの効果は何ですか?
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と完全には互換性がありません。UTF-8が必要な場合は、utf8mb4文字セットが必要です。–リッチレマー2018年3月28日23:41
そして
これは非常に重要なようです。コメントを読んで、@RichRemerに感謝します。Nikki、私はあなたがあなたの回答でこれをどのように多くのビューを得ることを考慮して編集すべきだと思います こちらhttps://dev.mysql.com/doc/refman/8.0/en/charset-unicode-utf8.htmlとこちらMySQLのutf8mb4とutf8文字セットの違いは何ですか?– Paulpro 3月12日17:46
utf8_bin
いいですよね?違いは何だutf8_bin
とはutf8_unicode_ci
?
utf8_bin
大文字と小文字が区別され、utf8_unicode_ci
大文字と小文字が区別されないことです。1つは必ずしも他より優れているわけではありません。ニーズに合ったものを使用してください。
utf8
ます。それはあなたが望むものではほとんどなく、予期しない混乱を引き起こすことがよくあります。utf8
文字セットがUTF-8と完全に互換性がありません。utf8mb4
文字セットを使用すると、UTF-8をしたい場合は、あなたが望むものです。
MySQLには、サーバー、データベース、テーブル、カラムの4つの照合レベルがあります。サーバー、データベース、またはテーブルの照合順序を変更する場合、各列の設定は変更せず、デフォルトの照合順序を変更します。
たとえば、データベースのデフォルトの照合順序を変更すると、そのデータベースで作成する新しいテーブルごとにその照合順序が使用され、テーブルのデフォルトの照合順序を変更すると、そのテーブルに作成する各列でその照合順序が取得されます。
show variables like "collation%";
ので、合計はSIXです。
テーブルだけでなくスキーマを変更する必要があるかもしれません
ALTER SCHEMA `<database name>` DEFAULT CHARACTER SET utf8mb4 DEFAULT COLLATE utf8mb4_unicode_ci (as Rich said - utf8mb4);
(mariaDB 10)
<database name>
代わりに<table name>
utf8
、しかしutf8mb4
。