character_set_client의 값을 utf8mb4로 설정


12

이 안내서utf8mb4따르 도록 DB를 변환하려고합니다 . 나는 설정했다 :

[client]
default-character-set=utf8mb4

[mysql]
default-character-set=utf8mb4

[mysqld]
init-connect='SET NAMES utf8mb4'
collation_server=utf8mb4_unicode_ci
character_set_server=utf8mb4
skip-character-set-client-handshake

그러나 값 character_set_clientcharacter_set_results여전히이 utf8mb4로 변경되지 않습니다.

mysql> SHOW VARIABLES WHERE Variable_name LIKE 'character\_set\_%' OR Variable_name LIKE 'collation%';
+--------------------------+--------------------+
| Variable_name            | Value              |
+--------------------------+--------------------+
| character_set_client     | utf8               |
| character_set_connection | utf8mb4            |
| character_set_database   | utf8mb4            |
| character_set_filesystem | binary             |
| character_set_results    | utf8               |
| character_set_server     | utf8mb4            |
| character_set_system     | utf8               |
| collation_connection     | utf8mb4_unicode_ci |
| collation_database       | utf8mb4_unicode_ci |
| collation_server         | utf8mb4_unicode_ci |
+--------------------------+--------------------+

내가 무엇을 잘못하고 있지? 해당 값을 utf8mb4로 설정하려면 어떻게합니까?

답변:


14

공개 : 나는 당신이 따르는 가이드 인 MySQL 데이터베이스에서 전체 유니 코드를 지원하는 방법 의 저자입니다 .

  1. 수정 된 설정을 어디에 저장 했습니까? mysqld기본 옵션이 어디에서 로드 되는지 확인하십시오 . 일반적으로 /etc/my.cnf( 안내서에 언급되어 있음 ) 시스템에 따라 다를 수 있습니다. 다음 명령을 실행하여 찾으십시오.

    $ mysqld --help --verbose 2> /dev/null | grep -A1 'Default options'
    Default options are read from the following files in the given order:
    /etc/my.cnf /etc/mysql/my.cnf /usr/local/etc/my.cnf ~/.my.cnf
  2. 변경 한 후 mysqld실행하여 다시 시작 했습니까 mysqld restart?


1.에 변경 사항을 저장했습니다 \xampp\mysql\bin\my.ini. 나는 mysqld --help --verbose 2> /dev/null | grep -A1 'Default options'다음과 같은 오류가 발생 하여 실행할 수 없었습니다 : 'grep' is not recognized as an internal or external command, operable program or batch file.나는이 물건을 처음 사용하므로 뭔가 잘못하고있을 수 있습니다.
qwaz

2. mysqld를 다시 시작한 후 다음과 같은 경고 메시지가 표시됩니다. 2014-02-19 10:25:17 0 [경고] character-set-client-handshake 대신 고유 옵션 접두사 character_set_client를 사용하는 것이 더 이상 사용되지 않으며 제거됩니다. 향후 릴리스에서. 대신 전체 이름을 사용하십시오. 2014-02-19 10:25:17 0 [경고] mysqld : 유효하지 않은 값 'utf8mb4'로 인한 옵션 '
문자

1
skip-character-set-client-handshake구성 파일에 왜 있습니까? 변수가 아닌 명령 줄 옵션입니다.
Mathias Bynens

1
로컬 서버를 다시 설치해야했습니다. 가이드를 다시 걸었고 모든 것이 잘되었습니다. 귀하의 답변과 도움에 감사드립니다. 충분한 답변을 얻을 수있게 되 자마자 답장으로 돌아와 찬성합니다.
qwaz 2019

3
나는이 시도하지만 여전히 character_set_client, character_set_connection, character_set_results, collation_connection로 표시됩니다 utf8. 왜 이것이 작동하지 않는 아이디어가 있습니까?
사리타

2

나는 또한 그 가이드를 따랐지만 같은 문제가 다시 나타났다. 실제 문제는 DEFAULT CHARACTER인수로 DB를 작성하는 데 사용되는 명령에 있으며 실행 중에 전달되지 않으면 기본 문자 세트가 전달 utfmb4됩니다.

다음은 수정하기 위해 수행 한 단계입니다.

  1. utf8mb4문자 세트 로 더미 데이터베이스를 작성하십시오 .

    create database `your_db_name_dummy`
      DEFAULT CHARACTER SET utf8mb4
      DEFAULT COLLATE utf8mb4_unicode_ci;
  2. 실제 구조 및 데이터를 실제 데이터베이스에서이 더미 데이터베이스로 복사

    mysqldump -uroot -proot_password your_db_name | mysql -uroot -proot_password your_db_name_dummy

  3. 현재 데이터베이스 삭제

    SET FOREIGN_KEY_CHECKS=0;
    DROP DATABASE your_db_name;
  4. 새로운 데이터베이스 생성

    create database `your_db_name`
      DEFAULT CHARACTER SET utf8mb4
      DEFAULT COLLATE utf8mb4_unicode_ci;
  5. 마지막으로 테이블 구조와 데이터를 원래 데이터베이스에 다시 넣습니다.

    mysqldump -uroot -proot_password your_db_name_dummy | mysql -uroot -proot_password your_db_name

위에서 언급 한 절차를 사용하려면 아래 언급 된 행도주의 깊게 읽으십시오.

전제 조건 및 내 상태 :

  • 모든 구조, 데이터, 저장 프로 시저, 기능, 트리거 등을 백업하십시오.
  • mysql --version EditLine 래퍼를 사용하는 Linux (x86_64) 용 mysql Ver 14.14 Distrib 5.7.22

  • cat /etc/my.cnf

    [client]
    default-character-set = utf8mb4
    
    [mysql]
    default-character-set = utf8mb4
    
    [mysqld]
    character-set-client-handshake = FALSE
    character-set-server = utf8mb4
    init-connect = 'SET NAMES utf8mb4
    collation-server = utf8mb4_unicode_ci
  • 나는 자바 클라이언트를 사용하고 있습니다. 'mysql:mysql-connector-java:5.1.30'

  • 내 연결 문자열은 jdbc:mysql://ip.of.database:3306/your_db_name?zeroDateTimeBehavior=convertToNull&noAccessToProcedureBodies=true&autoReconnect=true
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.