テーブルのデフォルトの照合順序を変更するにはどうすればよいですか?


186
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コマンドの効果は何ですか?



私自身や他の多くの人が2番目が正しいものであることに同意しているように見えるので、あなたは正しい答えを変更したいと思うかもしれません。
Ahi Tuna 14年

回答:


597

既存の列を含むテーブルのデフォルトの文字セットと照合順序を変更するには(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


4
デフォルトの文字セットを変更するとどのような影響がありますか?既存のデータを更新するため、テーブル全体を実行して更新を行ったり、ロックしたりする必要がありますか?
2015年

utf8_binいいですよね?違いは何だutf8_binとはutf8_unicode_ci
Jasom Dotnet、2015

1
これは私が使用した例にすぎません。違いは、utf8_bin大文字と小文字が区別され、utf8_unicode_ci大文字と小文字が区別されないことです。1つは必ずしも他より優れているわけではありません。ニーズに合ったものを使用してください。
Nikki Erwin Ramirez

12
@JasomDotnetあなたは今utf8mb4_unicode_ci使用する必要がありますstackoverflow.com/questions/766809/...
baptx

2
推奨しないようにする必要がありutf8ます。それはあなたが望むものではほとんどなく、予期しない混乱を引き起こすことがよくあります。utf8文字セットがUTF-8と完全に互換性がありません。utf8mb4文字セットを使用すると、UTF-8をしたい場合は、あなたが望むものです。
リッチレマー2018年

34

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

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


8
実際、MySQLには5つのレベルの照合順序があり、多くの人が忘れている文字セットレベルのデフォルトの照合設定があります。
Devy

6
接続照合もあるshow variables like "collation%";ので、合計はSIXです。
Dzmitry Lazerka 2016年

9

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


3

テーブルだけでなくスキーマを変更する必要があるかもしれません

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

(mariaDB 10)


<database name>代わりに<table name>
dnivog

1
あなたがお勧めしない理由受け入れ答えに私のコメントを参照してくださいutf8、しかしutf8mb4
リッチレマー2018年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.