Database/MySQL

[MySQL] MySQL character set encoding 변경 (utf8, utf8mb4)

Junhong Kim 2018. 3. 29. 15:55
728x90
반응형

MySQL encoding 변경 (utf8, utf8mb4)

MySQL 기본 패키지는 character set 이 latin1 로 설정되어있습니다.
character set 을 utf8 로 설정하여 한글 및 다른 언어가 께지는 것을 처리해야합니다.
때로는 utf8mb4 로 설정하는 경우도 있는데 utf8mb4는 emoji를 데이터베이스에 저장할 수 있습니다.
emoji는 4byte 문자이기 때문에 utf8 의 상위 호환인 utf8mb4를 사용해야 저장할 수 있습니다.

NOTE: character set 이 utf8 인 상태에서 emoji를 데이터베이스 저장하려면 error 가 발생합니다.

character set 확인

방법 (1)

mysql> SHOW VARIABLES WHERE Variable_name LIKE 'character\_set\_%' OR Variable_name LIKE 'collation%'; mysql> SHOW VARIABLES WHERE Variable_name LIKE 'c%'; +--------------------------+------------------------------------------------------+ | 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/local/Cellar/mysql/5.7.21/share/mysql/charsets/ | | check_proxy_users | OFF | | collation_connection | utf8mb4_unicode_ci | | collation_database | utf8mb4_unicode_ci | | collation_server | utf8mb4_unicode_ci | | completion_type | NO_CHAIN | | concurrent_insert | AUTO | | connect_timeout | 10 | | core_file | OFF | +--------------------------+------------------------------------------------------+

방법 (2)

mysql> STATUS -------------- mysql Ver 14.14 Distrib 5.7.21, for osx10.11 (x86_64) using EditLine wrapper Connection id: 29 Current database: Current user: root@localhost SSL: Not in use Current pager: stdout Using outfile: '' Using delimiter: ; Server version: 5.7.21 Homebrew Protocol version: 10 Connection: Localhost via UNIX socket Server characterset: utf8mb4 Db characterset: utf8mb4 Client characterset: utf8mb4 Conn. characterset: utf8mb4 UNIX socket: /tmp/mysql.sock Uptime: 20 hours 48 min 49 sec Threads: 3 Questions: 1654 Slow queries: 0 Opens: 294 Flush tables: 1 Open tables: 216 Queries per second avg: 0.022 --------------
  • Server characterset : 데이터베이스 생성 시 기본 값을 지정해 주지 않을 경우, 이 값으로 데이터 베이스 캐릭터 셋이 설정 됨.
  • DB characterset : 테이블 생성 시 기본 값을 지정해 주지 않을 경우, 이 값으로 테이블의 캐릭터 셋이 설정 됨.
  • Client characterset : 클라이언트 인코딩 설정 값.

방법(3)

SELECT * FROM information_schema.SCHEMATA S

위와 다르게 character set이 저장되어있을 경우 명령어를 통해서 mysql을 사용할때 변경 할 수 있지만,
이렇게 하면 데몬이 재실행 될때마다 다시 latin1으로 돌아가기 때문에 기본 값으로 변경하겠습니다.

character set 기본 값을 utf8mb4로 변경

(1) my.cnf 파일을 작성합니다.

vi /etc/my.cnf

(2) my.cnf에 다음 설정을 합니다.

[client] default-character-set = utf8mb4 [mysql] default-character-set = utf8mb4 [mysqldump] default-character-set = utf8mb4 [mysqld] skip-character-set-client-handshake init_connect="SET collation_connection = utf8mb4_unicode_ci" init_connect="SET NAMES utf8mb4 COLLATE utf8mb4_unicode_ci" character-set-server = utf8mb4 collation-server = utf8mb4_unicode_ci
  • skip-character-set-client-handshake: 클라이언트의 인코딩 설정을 무시하고 데이터베이스 인코딩을 씁니다.
  • init_connect: 데이터베이스에 connect할 경우 실행되는 스크립트입니다.


728x90
반응형