문서의 선택한 두 판 사이의 차이를 보여줍니다.
양쪽 이전 판 이전 판 다음 판 | 이전 판 | ||
database:mysql:charset [2011/11/27 20:17] kwon37xi |
database:mysql:charset [2022/04/14 12:51] (현재) kwon37xi |
||
---|---|---|---|
줄 1: | 줄 1: | ||
====== MySQL charset encoding ====== | ====== MySQL charset encoding ====== | ||
- | | + | ===== Charset과 Collation의 차이 ===== |
+ | * [[http:// | ||
+ | * [[http:// | ||
+ | |||
+ | > 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)은 심볼(글자)과 인코딩의 묶음이고, | ||
+ | > 예를들어 글자 A=0, B=1, a=10, b=11 이라고 할 때 ' | ||
+ | > 하지만 만약 대소문자를 구분하지 않는(case insensitive) collation을 지정하면 ' | ||
+ | ===== 기본 설정 ===== | ||
+ | | ||
#문자셋 지정 | #문자셋 지정 | ||
[client] | [client] | ||
- | character-set=utf8 | + | character-sets-dir=utf8 |
[mysqld] | [mysqld] | ||
init_connect=SET collation_connection = utf8_general_ci | init_connect=SET collation_connection = utf8_general_ci | ||
init_connect=SET NAMES utf8 | init_connect=SET NAMES utf8 | ||
- | default-character-set=utf8 | + | #default-character-set=utf8 |
character-set-server=utf8 | character-set-server=utf8 | ||
collation-server=utf8_general_ci | collation-server=utf8_general_ci | ||
</ | </ | ||
* 이후 '' | * 이후 '' | ||
+ | |||
+ | ===== DB 테이블 생성시 문자셋 지정 ===== | ||
+ | 참조 : | ||
+ | < | ||
+ | |||
+ | Database: | ||
+ | (CREATE | ALTER) DATABASE ... DEFAULT CHARACTER SET utf8 | ||
+ | |||
+ | Table: | ||
+ | (CREATE | ALTER) TABLE ... DEFAULT CHARACTER SET utf8 | ||
+ | </ | ||
+ | |||
+ | ===== 현재 문자셋 정보 보기 ===== | ||
+ | < | ||
+ | show variables like ' | ||
+ | </ | ||
+ | 결과 --> | ||
+ | < | ||
+ | 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 : / | ||
+ | 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 로 바꾸면 문자셋 특성이 사라지기 때문에 이런 변환과정을 거쳐야 | ||
+ | -- 합니다(메뉴얼에 의하면). 그냥 바꾸면 문자들이 손상됩니다. | ||
+ | </ | ||
+ | |||
+ | 참조 : [[http:// | ||
+ | |||
+ | |||
+ | ===== 스마트폰 이모지(emoji) 입력 ===== | ||
+ | * MySQL의 UTF-8은 3바이트 문자까지만 입력 가능하다. 4바이트를 입력하려면 **utf8mb4** 문자셋으로 변경해야 한다. | ||
+ | * [[https:// | ||
+ | *utf8_general_ci와 utf8_unicode_ci는 한국어, 영어, 중국어, 일본어에서는 Collation의 결과가 동일하다. 성능은 | ||
+ | | ||
+ | * DB 서버에서 문자셋을 '' | ||
+ | CREATE DATABASE my_db DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; | ||
+ | </ | ||
+ | * 혹은 특정 컬럼만 변경할 경우< | ||
+ | ALTER TABLE table_name MODIFY columnName text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; | ||
+ | </ | ||
+ | * DB 자체를 UTF8MB4 로 만들어도 JDBC URL에 '' | ||
+ | * DB 전체에 대한 charset 설정을 UTF8MB4로 하면 '' | ||
+ | * 그렇지 않을 경우에는 JDBC 커넥션이 맺어질 때마다 아래 명령으로 커넥션의 인코딩을 변경해야 한다. [[java: | ||
+ | set names utf8mb4 collate utf8mb4_unicode_ci; | ||
+ | </ | ||
+ | |||
+ | ===== 참조 ===== | ||
+ | * [[https:// | ||
+ | |||
+ |