MySQL 설치 후 character set과 collation을 변경하는 방법에 대해 설명합니다.

설치환경

- Windows 10

- Mysql 5.7.37

 

MySQL 설치 시 캐릭터셋을 명시적으로 설정하지 않으면 MySQL 5.7 이하는 latin1, MySQL 8은 utf8mb4가 기본 캐릭터셋이 됩니다. 현재 character set 확인은 mysql 로 접속한 후 status 명령어나 show varaiables, 시스템 테이블 조회 등으로 알 수 있습니다.

 

현재 설정값 확인

1)  status 명령어

mysql> status
--------------
mysql  Ver 14.14 Distrib 5.7.37, for Win64 (x86_64)

Connection id:          19
Current database:
Current user:           root@localhost
SSL:                    Cipher in use is ECDHE-RSA-AES128-GCM-SHA256
Using delimiter:        ;
Server version:         5.7.37-log MySQL Community Server (GPL)
Protocol version:       10
Connection:             localhost via TCP/IP
Server characterset:    latin1
Db     characterset:    latin1
Client characterset:    euckr
Conn.  characterset:    euckr
TCP port:               3306
Uptime:                 23 hours 35 min 40 sec

 

2) show variables

mysql> show global variables like 'character%';
+--------------------------+---------------------------------------------------------+
| Variable_name            | Value                                                   |
+--------------------------+---------------------------------------------------------+
| character_set_client     | euckr                                                   |
| character_set_connection | euckr                                                   |
| character_set_database   | latin1                                                  |
| character_set_filesystem | binary                                                  |
| character_set_results    | euckr                                                   |
| character_set_server     | latin1                                                  |
| character_set_system     | utf8                                                    |
| character_sets_dir       | C:\Program Files\MySQL\MySQL Server 5.7\share\charsets\ |
+--------------------------+---------------------------------------------------------+

 

3) select system table

mysql> select * from performance_schema.global_variables where variable_name like 'character%';
+--------------------------+---------------------------------------------------------+
| VARIABLE_NAME            | VARIABLE_VALUE                                          |
+--------------------------+---------------------------------------------------------+
| character_set_client     | latin1                                                  |
| character_set_connection | latin1                                                  |
| character_set_database   | latin1                                                  |
| character_set_filesystem | binary                                                  |
| character_set_results    | latin1                                                  |
| character_set_server     | latin1                                                  |
| character_set_system     | utf8                                                    |
| character_sets_dir       | C:\Program Files\MySQL\MySQL Server 5.7\share\charsets\ |
+--------------------------+---------------------------------------------------------+

 

설정값 변경

1. 환경파일(my.ini) 수정

별도로 설정파일의 설치위치를 지정하거나 변경하지 않은 경우,

윈도우에서 my.ini 파일은  C:\ProramData\MySQL\MySQL Server 5.7 하위에 생성됩니다.

참고로, linux인 경우에는 RHEL/CentOS는  /etc/my.cnf 이고 Ubuntu 는 /etc/mysql/mysql.conf.d/mysqld.cnf 입니다.

이 파일을 열어서 아래 내용을 추가합니다.

[mysqld]
character-set-server=utf8
collation-server=utf8_general_ci

이 설정은 서버 전체에 적용되며 신규로 생성한 데이터베이스와 해당 데이터베이스에 만드는 테이블의 기본값으로 적용됩니다.

 

utf8_general_ci

collation에서 ci는 case insensitive를 나타냅니다. 즉 영문의 대/소문자를 구분하지 않습니다. 대/소문자를 구분하여 정렬이 필요한 경우에는 utf8_bin 을 사용합니다. 예를 들어 order by 구문을 사용할 경우 collation을 ci 로 설정한 경우에는 대.소문자를 구분하지 않고 정렬합니다. a,A,B,b 라는 데이터가 있다면 ordering을 하게되면 대.소문자를 구분하지 않기 때문에 a,A,B,b 등으로 출력됩니다. 반면 utf8_bin을 적용하게 되면 a,b,A,B 식으로 정렬됩니다.

 

MySQL이 실행되고 있으면 재기동을 해줍니다.

MySQL에 접속하여 위의 3가지 방법 중 하나로 variable을 조회하여 정상적으로 수정이 되었는지 확인합니다.

 

추가로, 기존에 생성된 데이터베이스는 변경되지 않으므로 characterset과 collcation을 변경해줘야 합니다.

아래와 같은 명령어를 수행하면 기존에 생성했던 데이터베이스의 characterset과 collcation 이 변경됩니다. 아래 dbname 대신에에 변경하고 하는 DB를 입력하면 됩니다.

mysql> ALTER SCHEMA `dbname` DEFAULT CHARACTER SET utf8  DEFAULT COLLATE utf8_bin ;

 

 

 

 

'MySQL' 카테고리의 다른 글

MySQL - Delimiter  (0) 2023.04.10
MySQL 8.0 connect by  (0) 2023.03.21
GCP-Google Cloud Platform-프로젝트 구축  (0) 2022.03.04
mysql /*! */ 의미  (0) 2022.03.02
MySQL Workbech runtimeError 발생 시  (0) 2022.02.23

+ Recent posts