my.cnf에서 MySQL 기본 문자 세트를 UTF-8로 변경 하시겠습니까?


334

현재 우리는 응용 프로그램에서 문자 세트를 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

이것이 올바른 처리 방법입니까?


19
더 나은 기본값은 utf8mb4전체 유니 코드를 지원하는 실제 UTF-8입니다. MySQL 데이터베이스에서 전체 유니 코드를 지원하는 방법을 참조하십시오 .
Mathias Bynens

@Jorre 당신 utf8mb4은 이것이 위험한 전례를 설정하는 것이기 때문에 이것을 바꾸는 것에 반대 할 것 입니까?
Evan Carroll

답변:


424

기본값을 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의 문자 집합을 변경하려면 알려주십시오 ... 질문에 직접 지정하지 않았으므로 원하는 것인지 확실하지 않습니다.


18
위의 my.cnf 설정도 저에게 효과적이었습니다. 또한 ALTER TABLE TableCONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci 와 같이 테이블이 올바르게 설정되었는지 확인해야했습니다 .
Chris Livdahl

8
mysql 5.5에서는 작동하지 않습니다. <br/> [mysqld] # utf-8 collation-server의 변경 사항 = utf8mb4_unicode_ci init-connect = 'SET NAMES utf8mb4'character-set-server = utf8mb4 및 utf8mb4는 위에서 언급 한 것입니다.
Champ

12
Ubuntu 12.04에서는 이후에 첫 번째 줄을 제거한 경우 나에게 도움이되었습니다 [mysqld].
Brandon Bertelsen

4
[mysqld] 섹션에서 기본 문자 집합이 더 이상 허용되지 않는 것 같습니다
marsbard

4
UTF-8이 원하는 경우 MySQL의 utf8문자셋을 사용하지 마십시오 . 대신 사용하십시오 utf8mb4.
Mathias Bynens

255

최신 버전의 MySQL의 경우

default-character-set = utf8

문제를 일으킨다. 내가 생각하는 더 이상 사용되지 않습니다.

Justin Ball 이 " MySQL 5.5.12로 업그레이드하면 MySQL이 시작되지 않습니다 "에서 다음과 같이 말합니다 .

  1. 그 지시를 제거하면 좋을 것입니다.

  2. 그런 다음 구성 파일 (예 : '/etc/my.cnf')은 다음과 같아야합니다.

    [mysqld]
    collation-server = utf8_unicode_ci
    init-connect='SET NAMES utf8'
    character-set-server = utf8
  3. MySQL을 다시 시작하십시오.

  4. 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 |
       +----------------------+-----------------+

첫 번째 줄 max_allowed_packet = 64M이이 UTF8 문제와 관련이 있습니까?
malhal

나는있다 character_set_filesystem | utf8. 잘 모르겠습니다. 괜찮습니까?
삼촌 렘

1
MariaDB v5.5를 사용해 보았으며 작동합니다. 감사합니다! mysql Ver 15.1 Distrib 5.5.35-MariaDB, for debian-linux-gnu (x86_64) using readline 5.1
cenk February

제거 할 필요가 없다고 생각합니다 default-character-set. 대신 loose-default-character-set = utf8'loose-'접두사로 변경할 수 있습니다 . "loose-default-character-set"mysqlbinlog에mysqlbinlog 대해 google을 사용해야하는 경우이 방법 이 만족 스럽다 .
KajMagnus

init-connect='SET NAMES utf8'정말 필요? 그렇지 않으면 우리는 성능을 위해 그것없이 확실히 할 수 있습니다.
datasn.io

56

이 질문에는 이미 많은 답변이 있지만 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). 그런 다음 테이블을 변환 할 수 있습니다.


나는 당신의 설정을 따라,하지만 난 찾을 character_set_database여전히 utf8collation_databaseutf8_bin`이다. 내가 뭐 놓친 거 없니?
스튜어트

내가 놓친 것을 찾았습니다. 이 두 설정은 데이터베이스 자체가 작성 될 때 설정됩니다. 이 질문을보십시오; stackoverflow.com/questions/22572558/…
스튜어트

1
character-set-client-handshake = FALSE[mysqld] 섹션에 추가 하면 응용 프로그램 계층에서 실수를하더라도 항상 기본 인코딩을 사용합니다
Lukas Liesis

안녕하세요이 솔루션을 시도했지만 여전히 character_set_client를 표시 할 수 없습니다 | utf8mb4. utf8입니다. character_set_database utf8mb4 및 character_set_server utf8mb4 만 변경되지 않은 utf8mb4입니다. 제발 도와주세요
Bhavin 차우에게

@ baic6 색인화 된 열만 문제를 일으킬 수있는 이유를 설명하는 메모를 추가하는 것이 좋습니다. 767 바이트 제한은 인덱스 된 열에 만 적용되며 "키"에 대한 제한은 coz입니다. 색인화되지 않은 열의 경우 일반적으로 적용되지 않습니다. 열에 최대 바이트 길이가 255 자이고 utf8의 최대 3 바이트가 사용 된 경우에도 255 * 3 바이트 만 필요하며이 경우 utf8mb4는 utf8mb4의 문자도 3 바이트 만 사용합니다. 3 바이트 만 필요합니다. 즉, utf8에 맞지 않는 문자가 열에 저장되어 있지 않으면 정보가 이미 손실되지 않는 한입니다.
sam

55

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)

2
무엇 않습니다 skip-character-set-client-handshake정확하고 필요한 어떤 상황에서 무엇입니까?
Simon East

3
@Simon, 사용할 때 show variables like "%collation%";'collation_connection'은 utf8_general_cicollation_database 및 collation_server 는으로보고있었습니다 utf8_unicode_ci. 줄을 추가하면 skip-character-set-client-handshake일반 항목이 유니 코드로 변경되어 세 항목 모두 일관되었습니다.
Vaughany

2
MySQL 5.6에서 skip-character-set-client-handshake는 @Vaughany의 말을하지 않습니다. 어떠한 제안?
Ababneh A

4
skip-character-set-client-handshake나를 위해 (- 데비안 7 코스의 "문자 집합 서버"와 "데이터 정렬 서버"와 함께)를했다. init_connect들과 함께 또는없이 변화를하지 않은 skip중복을 보인다. +1하고 감사합니다.
Jeff

3
skip-character-set-client-handshake클라이언트가 전송 한 문자 세트 정보를 무시합니다. 통신 중에 특정 문자 집합을 적용하는 것이 좋지만 클라이언트가 다른 것을 기대하면 문제가 발생할 수 있습니다. 클라이언트 (응용 프로그램)에서 이것을 지정하는 것이 좋습니다.
0b10011

31

참고 : 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

2
참고 : 기본값이 변경됩니다. 기존 열의 인코딩은 변경 하지 않습니다 .
Rick James

24

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)

5
좋은 대답입니다. 어떤 부분이 과잉 상태인지에 대한 간단한 설명은 사람들이 구성에서 원하는 것을 정확하게 결정하는 데 도움이 될 수 있습니다.
Mike Samuel

@Derek, [mysql] default-character-set=utf8그러면 어떻게합니까?
Pacerier

1
[client] 옵션 그룹은 이미 my.cnf 파일을 읽는 모든 MySQL 클라이언트에 대한 옵션을 설정합니다. [mysql] 그룹은 특히 "mysql"클라이언트 바이너리에 대한 옵션을 설정합니다. 다른 클라이언트에 적용되지 않는 mysql 옵션을 설정하려면이 그룹을 사용하는 것이 좋지만 두 위치에서 동일한 옵션 값을 설정하는 것은 중복됩니다. dev.mysql.com/doc/refman/5.6/en/option-files.html
Derek

@Mike Samuel에서 기본 문자 집합을 utf8로 설정하면 기본 조합 모드 인 utf8_general_ci가 이미 포함되어 있습니다. 반면 "init-connect = 'SET NAMES utf8'"은 서버에 연결하는 모든 클라이언트가 utf8을 사용하도록 강제하기 때문에 다소 흥미로운 아이디어입니다. 그러나 이는 연결의 연결 권한에 따라 일관되지 않게 적용됩니다 사용자가 서버가 요청한 문자 집합을 재정의하면 일부 연결 타사 클라이언트가 혼란 스러울 수 있습니다. dev.mysql.com/doc/refman/5.6/en/charset-applications.html
Derek

위해 [mysqld]사용 character-set-server대신에default-character-set
릭 제임스

23

또한 제목 default-character-set = utf8아래에 설정 한 후에 [mysqld]MySQL 5.5.x가 Ubuntu 12.04 (Precise Pangolin) 에서 시작되지 않는다는 것을 알았습니다 .


16
그건 MySQL의 버그 # 52047 . 아래에서을 [mysqld](를) character-set-server대신 사용해야 합니다 default-character-set. (매우 동의 함, 혼란!)
마티아스 Bynens

예. 5.0에서 더 이상 사용되지 않습니다. 5.5에서 제거되었습니다.
Rick James

22

MySQL v5.5.3 이상 :

[mysqld] 섹션에 세 줄만 추가하면됩니다.

[mysqld]
character-set-server = utf8
collation-server = utf8_unicode_ci
skip-character-set-client-handshake

참고 : 포함 skip-character-set-client-handshake여기 것은 모두 포함 할 필요가 미연에 방지 init-connect[mysqld]default-character-set[client][mysql]섹션을.


1
와우,이 질문에 대한 많은 중복 답변이 있지만 이것이 가장 간단한 것 같습니다. v5.5.44에서도 작동합니다.
저스틴 와트

9

Xubuntu 12.04에서 간단히 추가했습니다.

[mysqld]
character_set_server = utf8

/etc/mysql/my.cnf로

결과는

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)

또한 http://dev.mysql.com/doc/refman/5.6/en/charset-server.html을 살펴보십시오.


또한 [client] default-character-set = utf8이 필요합니다. 그렇지 않으면 명령 줄에서 mysql을 사용할 때 utf8을 사용하지 않아 파일로 파이프하는 백업이 손상 될 수 있습니다.
malhal

9

여기에 나열된 모든 설정은 정확하지만 가장 최적의 충분한 솔루션입니다.

[mysqld]
init_connect='SET collation_connection = utf8_unicode_ci'
character-set-server = utf8
collation-server = utf8_unicode_ci

[client]
default-character-set = utf8

에 추가하십시오 /etc/mysql/my.cnf.

성능 문제로 인해 utf8_unicode_ci 데이터 정렬 유형을 선택합니다 .

결과는 다음과 같습니다.

mysql> SHOW VARIABLES LIKE 'character%';
+--------------------------+----------------------------+
| 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/ |
+--------------------------+----------------------------+

mysql> SHOW VARIABLES LIKE 'collation%';
+----------------------+-----------------+
| Variable_name        | Value           |
+----------------------+-----------------+
| collation_connection | utf8_unicode_ci |
| collation_database   | utf8_unicode_ci |
| collation_server     | utf8_unicode_ci |
+----------------------+-----------------+

그리고 이것은 SUPER 이외의 사용자 로 연결할 때입니다 !

예를 들어, SUPER 및 비 SUPER 사용자로서의 연결 차이 (물론 utf8_unicode_ci 데이터 정렬의 경우 ) :

슈퍼 권한이있는 사용자 :

mysql> SHOW VARIABLES LIKE 'collation%';
+----------------------+-----------------+
| Variable_name        | Value           |
+----------------------+-----------------+
| collation_connection | utf8_general_ci | <---
| collation_database   | utf8_unicode_ci |
| collation_server     | utf8_unicode_ci |
+----------------------+-----------------+

SUPER 이외의 권한을 가진 사용자 :

mysql> SHOW VARIABLES LIKE 'collation%';
+----------------------+-----------------+
| Variable_name        | Value           |
+----------------------+-----------------+
| collation_connection | utf8_unicode_ci |
| collation_database   | utf8_unicode_ci |
| collation_server     | utf8_unicode_ci |
+----------------------+-----------------+

나는 왜 당신이 하나 또는 다른 옵션을 사용 해야하는지 자세하게 설명 하는 포괄적 인 기사 (rus)를 썼습니다 . 서버, 데이터베이스, 연결, 테이블 및 열에 대한 모든 유형의 문자 세트데이터 정렬 이 고려됩니다.

이 기사와 기사가 불분명 한 순간을 분명히하는 데 도움이되기를 바랍니다.


3
링크 된 기사를 읽을 수 있기를 원하지만 러시아어와 Google 번역은 읽을 수 없습니다. 내가 말할 수있는 것에서 그것은 매우 흥미로울 것입니다. 영어 버전을 게시 하시겠습니까?
Martijn Heemels

2
SUPER 사용자 연결 데이터 정렬을 설정하지 못한 설정에 대해 설명해 주시겠습니까? (그리고 해결책이
있습니까

@gahcep, utf8_unicode_ci성능 문제로 인해 사용한다고 말한 다음 utf8_bin대신 사용 하지 않겠습니까?
Pacerier

안녕하세요, Paceriar. 좋은 지적. 이제는 선택에 대한 올바른 선택인지 확실하지 않습니다 utf8_unicode_ci. 성능 테스트에 시간을 소비하지 않았습니다.
gahcep


4

구성 할 때 MySQL 버전과 Linux 배포판이 중요 할 수 있습니다.

그러나 [mysqld]섹션 아래의 변경 이 권장됩니다.

tomazzlender의 답변에 대한 간단한 설명을 원합니다.

[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

[mysqld]

collation_connection을 utf8_unicode_ci로 변경합니다

init_connect='SET collation_connection = utf8_unicode_ci'

사용 SET NAMES:

init_connect='SET NAMES utf8'

SET NAMES는 다음 세 문자에 영향을줍니다.

character_set_client
character_set_results
character_set_connection

이것은 설정됩니다 character_set_database & character_set_server

character-set-server=utf8

collation_database & collation_server에만 영향을 미칩니다

collation-server=utf8_unicode_ci

죄송합니다, 이것이 무엇인지 잘 모르겠습니다. 그러나 나는 그것을 사용하지 않습니다 :

skip-character-set-client-handshake

문서 노트 character_set_server를 수동으로 설정할 수 없습니다.
브라이언

그렇다면 최첨단 접근법은 무엇입니까? character set데이터베이스 연결을 설정할 때 명시 적으로 전달할 수 있지만 약간 성가신 것처럼 보입니다.
Lihang Li

실제로 나는 실수했다. 설명서에는 character_set_database를 동적으로 설정해서는 안됩니다. character_set_server를 언급하지 않습니다. 그러나 character_set_server가 새로 생성 된 데이터베이스의 기본값에만 영향을 미치기 때문에 걱정할 필요가 없습니다.
Brian

제가 위에서 언급 한 나는, 지금 다시 실험을했던 것처럼 character_set_server에서 [mysqld]섹션에 영향을 character_set_database하고 character_set_server. 이제 character set데이터베이스, 테이블 및 데이터베이스 연결을 만들 때 사용할 것을 명시 적으로 지적하는 것이 좋습니다. 솔직히 말해서, 문서 mysql는 그렇게 쉽게 이해되지 않습니다. 당신은 모든 얻을 수있는 일반적인 방법이 있는지 알고 계십니까 character setcollationMySQL의에서 수행 설정을?
Lihang Li

4

페도라 21에서

$ vi /etc/my.cnf

다음을 추가하십시오.

[client]
default-character-set=utf8

[mysql]
default-character-set=utf8

[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

저장하고 종료.

마지막으로 mysqld 서비스를 다시 시작하십시오 service mysqld restart.


1

MySQL 5.5는 다음과 같습니다.

[mysqld]
character_set_client=utf8
character_set_server=utf8
collation_server=utf8_unicode_ci

collation_server 선택 사항입니다.

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/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)

1

MySQL Workbench를 사용하여 클라이언트의 문자 집합 지원을 확인하는 데 문제가있는 경우 다음 사항에 유의하십시오.

중요 MySQL Workbench에서 연 모든 연결은 클라이언트 문자 세트를 utf8로 자동 설정합니다. SET NAMES ... 등의 클라이언트 문자 집합을 수동으로 변경하면 MySQL Workbench가 문자를 올바르게 표시하지 않을 수 있습니다. 클라이언트 문자 집합에 대한 자세한 내용은 연결 문자 집합 및 데이터 정렬을 참조하십시오.

따라서 my.cnf 변경으로 MySQL Workbench의 문자 세트를 무시할 수 없었습니다. 예 : 'set names utf8mb4'


1

클라이언트 설정에 혼란 스러우면 mysql 서비스를 다시 시작한 후 conn이 재설정됩니다. 다음 단계를 시도하십시오 (나에게 도움이 됨).

  1. vi /etc/my.cnf
  2. 내용 타격을 추가하고 :wq [client] character-sets-dir=/usr/local/mysql/share/mysql/charsets
  3. mysql을 다시 시작하고 mysql을 로그인하고, database, input command status;를 사용하면 'client'에 대한 문자 세트가 있고 'conn'이 'utf8'로 설정되어 있습니다.

자세한 내용 은 참조 를 확인하십시오 .


0

당신이하는 방식으로 할 수 있으며, 작동하지 않으면 mysql을 다시 시작해야합니다.


-1

MySQL 캐릭터 변경 :

고객

default-character-set=utf8

mysqld

character_set_server=utf8

다음 default-character-set=utf8과 같은 오류가 발생할 수 있으므로 mysqld로 쓰면 안됩니다 .

시작 : 작업을 시작하지 못했습니다

마침내 :

 +--------------------------+----------------------------+
 | 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/ |
 +--------------------------+----------------------------+
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.