logo

한국어

Language

MySQL charset encoding

Charset과 Collation의 차이

A character set is a set of symbols and encodings. A collation is a set of rules for comparing characters in a character set.

문자셋(character set)은 심볼(글자)과 인코딩의 묶음이고, Collation은 문자셋의 문자들을 비교하는 규칙이다.

예를들어 글자 A=0, B=1, a=10, b=11 이라고 할 때 'A'는 글자이고 '0'은 인코딩이다. 여기서 볼 때 'A'와 'a'는 서로 다른 인코딩을 가지므로 다르다고 볼 수 있다.
하지만 만약 대소문자를 구분하지 않는(case insensitive) collation을 지정하면 'A'='a'가 되게 되는 것이다. 대소문자를 지정하지 않는 Collation은 ''_ci''로 끝난다.

기본 설정

  • UTF-8 설정 (Ubuntu : /etc/mysql/conf.d/encoding.cnf, RedHat /etc/my.cnf)
    #문자셋 지정
    [client]
    character-sets-dir=utf8
    
    [mysqld]
    init_connect=SET collation_connection = utf8_general_ci
    init_connect=SET NAMES utf8
    #default-character-set=utf8 # deprecated
    character-set-server=utf8
    collation-server=utf8_general_ci
  • 이후 service mysql restart

DB 테이블 생성시 문자셋 지정

참조 :MySQL and UTF-8

Database:
(CREATE | ALTER) DATABASE ... DEFAULT CHARACTER SET utf8

Table:
(CREATE | ALTER) TABLE ... DEFAULT CHARACTER SET utf8

현재 문자셋 정보 보기

show variables like 'c%';

결과 –>

character_set_client : utf8
character_set_connection : utf8
character_set_database : utf8
character_set_results : utf8
character_set_server : utf8
character_set_system : utf8
character_sets_dir : /usr/share/mysql/charsets/
collation_connection : utf8_general_ci
collation_database : utf8_general_ci
collation_server : utf8_general_ci

이미 생성된 데이터베이스의 문자셋 바꾸기

-- 테이블의 문자셋 정보 확인.
INFORMATION_SCHEMA.TABLES or SHOW CREATE TABLE [TABLENAME];
mysql> SET character_set_client = utf8;
mysql> SET character_set_results = utf8;
mysql> SET character_set_connection = utf8;
mysql> ALTER DATABASE [DB명] DEFAULT CHARACTER SET utf8;

이미 데이터가 들어간 테이블의 문자셋 변환

create table test (merong varchar(20) collate latin1_general_ci);

-- 이렇게 만들어진 테이블에 한글 데이터를 넣은 후 필드를 euckr 로 변경하려면
-- 다음처럼 해야 합니다.

alter table test modify merong binary(100);
alter table test modify merong varchar(20) collate euckr_korean_ci;

-- binary 로 바꾸면 문자셋 특성이 사라지기 때문에 이런 변환과정을 거쳐야
-- 합니다(메뉴얼에 의하면). 그냥 바꾸면 문자들이 손상됩니다.

참조 : MySQL 4.1.8 RPM 설치시 한글설정. Database.sarang.net

조회 수 :
5332
등록일 :
2015.06.12
21:16:52 (*.175.160.210)
엮인글 :
http://www.cubequest.org/xe/index.php?mid=sql&document_srl=165887&act=trackback&key=932
게시글 주소 :
http://www.cubequest.org/xe/index.php?document_srl=165887

persona

2015.06.12
21:17:02
(*.175.160.210)

http://kwonnam.pe.kr/wiki/database/mysql/charset

List of Articles
번호 제목 글쓴이 날짜 조회 수
49 [MYSQL]테이블 크기 확인 Cheeryj 2017-05-01 2930
48 [MYSQL]GROUP_CONCAT persona 2016-10-28 2164
47 Get size of all tables in database persona 2016-10-20 22999
46 Enterprise manager에서 한글로 바뀌는 문제 persona 2016-10-20 1257
45 View the Definition of a Stored Procedure persona 2016-08-03 2916
44 [MSSQL] 테이블 프로시저 존재 체크 persona 2016-07-28 2287
43 [MSSQL] Collation persona 2016-06-23 3846
42 [MSSQL] RESTORE할 때 오류 persona 2016-06-21 2922
41 [MSSQL] Resetting SQL Server Identity Columns: persona 2016-06-20 1721
40 [MSSQL]using SQLCMD persona 2016-06-05 6349
39 PostgreSQL 설치 & 사용법 정리 persona 2016-05-05 21358
38 [PostgreSQL]설치 persona 2016-04-30 32156
37 [MSSQL] Index 리스트 얻기 persona 2016-04-07 7391
36 MySQL EXPORT & IMPORT [1] persona 2016-02-20 4917
35 MySQL via MERGE table engine: persona 2015-10-15 12687
» MySQL charset encoding [1] persona 2015-06-12 5332
33 SQL SERVER INSTANACE LIST persona 2015-04-17 4092
32 SQL JOIN file Cheeryj 2015-03-25 4581
31 SQL SERVER SINGLE USER MODE persona 2015-03-17 5407
30 MSSQL FILESTREAM 활성화 persona 2015-03-17 5489