この質問にはすでに多くの回答がありますが、Mathias Bynensは、UTF-8をサポートするために「utf8」の代わりに「utf8mb4」を使用する必要があると述べました(「utf8」は4バイト文字をサポートせず、フィールドは挿入時に切り捨てられます))。これは重要な違いだと思います。したがって、デフォルトの文字セットと照合順序を設定する方法についての別の回答を次に示します。大量のうんちを挿入できるもの(💩)。
これはMySQL 5.5.35で動作します。
一部の設定はオプションである場合があることに注意してください。何も忘れていないかどうか完全にはわからないので、この回答をコミュニティWikiにします。
古い設定
mysql> SHOW VARIABLES LIKE 'char%'; SHOW VARIABLES LIKE 'collation%';
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | latin1 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | latin1 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)
+----------------------+-------------------+
| Variable_name | Value |
+----------------------+-------------------+
| collation_connection | utf8_general_ci |
| collation_database | latin1_swedish_ci |
| collation_server | latin1_swedish_ci |
+----------------------+-------------------+
3 rows in set (0.00 sec)
構成
# 💩 𝌆
# UTF-8 should be used instead of Latin1. Obviously.
# NOTE "utf8" in MySQL is NOT full UTF-8: http://mathiasbynens.be/notes/mysql-utf8mb4
[client]
default-character-set = utf8mb4
[mysqld]
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
[mysql]
default-character-set = utf8mb4
新しい設定
mysql> SHOW VARIABLES LIKE 'char%'; SHOW VARIABLES LIKE 'collation%';
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | utf8mb4 |
| character_set_connection | utf8mb4 |
| character_set_database | utf8mb4 |
| character_set_filesystem | binary |
| character_set_results | utf8mb4 |
| character_set_server | utf8mb4 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)
+----------------------+--------------------+
| Variable_name | Value |
+----------------------+--------------------+
| collation_connection | utf8mb4_general_ci |
| collation_database | utf8mb4_unicode_ci |
| collation_server | utf8mb4_unicode_ci |
+----------------------+--------------------+
3 rows in set (0.00 sec)
character_set_system は常にutf8です。
これは既存のテーブルには影響せず、デフォルトの設定(新しいテーブルに使用される)にすぎません。次のALTERコードを使用して、既存のテーブルを変換できます(ダンプ復元の回避策はありません)。
ALTER DATABASE databasename CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
ALTER TABLE tablename CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
編集:
MySQL 5.0サーバー:character_set_client、character_set_connection、character_set_results、collation_connectionはlatin1のままです。発行SET NAMES utf8
(そのバージョンではutf8mb4は使用不可)により、これらもutf8に設定されます。
警告:タイプVARCHAR(255)のインデックス列を持つutf8テーブルがある場合、キーの最大長を超えているため(Specified key was too long; max key length is 767 bytes.
)、変換できない場合があります。可能であれば、列サイズを255から191に減らします(191 * 4 = 764 <767 <192 * 4 = 768であるため)。その後、テーブルを変換できます。
utf8mb4
に注意してください。つまり、完全なUnicodeをサポートする実際のUTF-8です。MySQLデータベースで完全なUnicodeをサポートする方法を参照してください。