현재 우리는 응용 프로그램에서 문자 세트를 UTF-8 로 설정하기 위해 PHP에서 다음 명령을 사용하고 있습니다.
이것은 약간의 오버 헤드이므로 MySQL의 기본 설정으로 설정하고 싶습니다. /etc/my.cnf 또는 다른 위치에서이 작업을 수행 할 수 있습니까?
SET NAMES 'utf8'
SET CHARACTER SET utf8
/etc/my.cnf에서 기본 문자 집합을 찾았지만 문자 집합에 대한 내용은 없습니다.
이 시점에서 MySQL charset 및 collation 변수를 UTF-8로 설정하기 위해 다음을 수행했습니다.
skip-character-set-client-handshake
character_set_client=utf8
character_set_server=utf8
이것이 올바른 처리 방법입니까?
답변
기본값을 UTF-8로 설정하려면 my.cnf에 다음을 추가하려고합니다.
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
[mysqld]
collation-server = utf8_unicode_ci
init-connect='SET NAMES utf8'
character-set-server = utf8
기존 DB의 문자 집합을 변경하려면 알려주십시오 … 질문에 직접 지정하지 않았으므로 원하는 것인지 확실하지 않습니다.
답변
최신 버전의 MySQL의 경우
default-character-set = utf8
문제를 일으킨다. 내가 생각하는 더 이상 사용되지 않습니다.
Justin Ball 이 ” MySQL 5.5.12로 업그레이드하면 MySQL이 시작되지 않습니다 “에서 다음과 같이 말합니다 .
-
그 지시를 제거하면 좋을 것입니다.
-
그런 다음 구성 파일 (예 : ‘/etc/my.cnf’)은 다음과 같아야합니다.
[mysqld] collation-server = utf8_unicode_ci init-connect='SET NAMES utf8' character-set-server = utf8
-
MySQL을 다시 시작하십시오.
-
MySQL이 UTF-8인지 확인하려면 MySQL 프롬프트에서 다음 쿼리를 실행하십시오.
-
첫 번째 질문 :
mysql> show variables like 'char%';
출력은 다음과 같아야합니다.
+--------------------------+---------------------------------+ | Variable_name | Value | +--------------------------+---------------------------------+ | character_set_client | utf8 | | character_set_connection | utf8 | | character_set_database | utf8 | | character_set_filesystem | binary | | character_set_results | utf8 | | character_set_server | utf8 | | character_set_system | utf8 | | character_sets_dir | /usr/local/mysql/share/charsets/| +--------------------------+---------------------------------+
-
두 번째 질문 :
mysql> show variables like 'collation%';
그리고 쿼리 출력은 다음과 같습니다.
+----------------------+-----------------+ | Variable_name | Value | +----------------------+-----------------+ | collation_connection | utf8_general_ci | | collation_database | utf8_unicode_ci | | collation_server | utf8_unicode_ci | +----------------------+-----------------+
-
답변
이 질문에는 이미 많은 답변이 있지만 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). 그런 다음 테이블을 변환 할 수 있습니다.
답변
MySQL 5.5에서는 my.cnf에 있습니다.
[mysqld]
init_connect='SET collation_connection = utf8_unicode_ci'
init_connect='SET NAMES utf8'
character-set-server=utf8
collation-server=utf8_unicode_ci
skip-character-set-client-handshake
결과는
mysql> show variables like "%character%";show variables like "%collation%";
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | utf8 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | utf8 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)
+----------------------+-----------------+
| Variable_name | Value |
+----------------------+-----------------+
| collation_connection | utf8_unicode_ci |
| collation_database | utf8_unicode_ci |
| collation_server | utf8_unicode_ci |
+----------------------+-----------------+
3 rows in set (0.00 sec)
답변
참고 :
my.cnf 파일은 다음 위치에 있습니다./etc/mysql/
이 줄을 추가 한 후 :
[mysqld]
collation-server = utf8_unicode_ci
init-connect='SET NAMES utf8'
character-set-server = utf8
skip-character-set-client-handshake
[client]
default-character-set = utf8
[mysql]
default-character-set = utf8
서버를 다시 시작하는 것을 잊지 마십시오 :
sudo service mysql restart
답변
NijaCat은 가까웠지만 과잉 행동을 지정했습니다.
기본값을 UTF-8로 설정하려면 my.cnf에 다음을 추가하려고합니다.
[client]
default-character-set=utf8
[mysqld]
default-character-set = utf8
그런 다음 확인하십시오.
mysql> show variables like "%character%";show variables like "%collation%";
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | utf8 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | utf8 |
| 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 | utf8_general_ci |
| collation_server | utf8_general_ci |
+----------------------+-----------------+
3 rows in set (0.00 sec)
답변
또한 제목 default-character-set = utf8
아래에 설정 한 후에 [mysqld]
MySQL 5.5.x가 Ubuntu 12.04 (Precise Pangolin) 에서 시작되지 않는다는 것을 알았습니다 .