이 질문에는 이미 많은 답변이 있지만 Mathias Bynens는 더 나은 UTF-8 지원을 위해 'utf8'대신 'utf8mb4'를 사용해야한다고 언급했습니다 ( 'utf8'은 4 바이트 문자를 지원하지 않으며 필드는 삽입시 잘립니다) ). 나는 이것이 중요한 차이점이라고 생각합니다. 기본 문자 세트와 데이터 정렬을 설정하는 방법에 대한 또 다른 대답이 있습니다. 똥 더미 (💩)를 넣을 수있는 것.
이것은 MySQL 5.5.35에서 작동합니다.
일부 설정은 선택 사항 일 수 있습니다. 내가 잊어 버린 것을 완전히 확신하지 못하므로이 답변을 커뮤니티 위키로 만들 것입니다.
이전 설정
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
전체 유니 코드를 지원하는 실제 UTF-8입니다. MySQL 데이터베이스에서 전체 유니 코드를 지원하는 방법을 참조하십시오 .