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 |