한글 데이터를 데이터베이스에 넣어야 할 경우에 자주 겪는 일은 아무래도 한글이 깨지는 현상일 것이다.
멘탈이 터지지만 이유는 외의로 간단하다.
첫번째로는 데이터베이스 생성 시에 한글 지원 캐릭터 셋을 설정해야한다.
CREATE DATABASE test DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
이렇게 하면 한글로 된 데이터를 제대로 저장한다.
아래의 명령어로 해당 데이터베이스에서 지원하는 캐릭터 셋을 조회할 수 있다.
show character set;
Charset : 사용하는 언어를 표현하기 위한 문자들의 집합을 의미
Description : Charset 설명
Default Collection : 기본 Collection
Mixen : 교차 언어 지원 갯수
Charset | Description | Default Collection | Mixen |
---|---|---|---|
big5 | Big5 Traditional Chinese | big5_chinese_ci | 2 |
dec8 | DEC West European | dec8_swedish_ci | 1 |
cp850 | DOS West European | cp850_general_ci | 1 |
hp8 | HP West European | hp8_english_ci | 1 |
koi8r | KOI8-R Relcom Russian | koi8r_general_ci | 1 |
latin1 | cp1252 West European | latin1_swedish_ci | 1 |
latin2 | ISO 8859-2 Central European | latin2_general_ci | 1 |
swe7 | 7bit Swedish | swe7_swedish_ci | 1 |
ascii | US ASCII | ascii_general_ci | 1 |
ujis | EUC-JP Japanese | ujis_japanese_ci | 3 |
sjis | Shift-JIS Japanese | sjis_japanese_ci | 2 |
hebrew | ISO 8859-8 Hebrew | hebrew_general_ci | 1 |
tis620 | TIS620 Thai | tis620_thai_ci | 1 |
euckr | EUC-KR Korean | euckr_korean_ci | 2 |
koi8u | KOI8-U Ukrainian | koi8u_general_ci | 1 |
gb2312 | GB2312 Simplified Chinese | gb2312_chinese_ci | 2 |
greek | ISO 8859-7 Greek | greek_general_ci | 1 |
cp1250 | Windows Central European | cp1250_general_ci | 1 |
gbk | GBK Simplified Chinese | gbk_chinese_ci | 2 |
latin5 | ISO 8859-9 Turkish | latin5_turkish_ci | 1 |
armscii8 | ARMSCII-8 Armenian | armscii8_general_ci | 1 |
utf8 | UTF-8 Unicode | utf8_general_ci | 3 |
ucs2 | UCS-2 Unicode | ucs2_general_ci | 2 |
cp866 | DOS Russian | cp866_general_ci | 1 |
keybcs2 | DOS Kamenicky Czech-Slovak | keybcs2_general_ci | 1 |
macce | Mac Central European | macce_general_ci | 1 |
macroman | Mac West European | macroman_general_ci | 1 |
cp852 | DOS Central European | cp852_general_ci | 1 |
latin7 | ISO 8859-13 Baltic | latin7_general_ci | 1 |
utf8mb4 | UTF-8 Unicode | utf8mb4_general_ci | 4 |
cp1251 | Windows Cyrillic | cp1251_general_ci | 1 |
utf16 | UTF-16 Unicode | utf16_general_ci | 4 |
utf16le | UTF-16LE Unicode | utf16le_general_ci | 4 |
cp1256 | Windows Arabic | cp1256_general_ci | 1 |
cp1257 | Windows Baltic | cp1257_general_ci | 1 |
utf32 | UTF-32 Unicode | utf32_general_ci | 4 |
binary | Binary pseudo charset | binary | 1 |
geostd8 | GEOSTD8 Georgian | geostd8_general_ci | 1 |
cp932 | SJIS for Windows Japanese | cp932_japanese_ci | 2 |
eucjpms | UJIS for Windows Japanese | eucjpms_japanese_ci | 3 |
gb18030 | China National Standard GB18030 | gb18030_chinese_ci | 4 |
위처럼 셋팅을 해도 서버에서 데이터 Serving을 할 경우에 깨진 글자로 나가는 경우가 있다.
그런 경우는 mysql.cnf
파일 세팅이 제대로 이루어지지 않은 경우이다.
ubuntu 서버 기준으로 /etc/mysql/conf.d/mysql.cnf
경로에 설정 파일이 존재한다.
[client]
default-character-set = utf8
[mysqld]
skip-character-set-client-handshake
init_connect = SET collation_connection = utf8_general_ci
init_connect = SET NAMES utf8
character-set-server = utf8
collation-server = utf8_general_ci
default-character-set = utf8
[mysqldump]
default-character-set = utf8
[mysql]
default-character-set = utf8
이렇게 설정을 해주면 mysql cli로 접속을 하든 데이터베이스 백업을 하든 데이터 Serving을 하든 utf-8 포맷으로 통일이 되어서 한글이 깨지는 현상으로부터 벗어날 수 있다.