Mysql & Maria/admin

MySQL Character set 처리

dbavayne 2023. 7. 5. 17:07
MySQL에서 설정 가능한 Character set 관련 변수들은 아래와 같은 것들이 있다.
  • character_set_system (설정 불가능 변수) 
        MySQL 서버가 Identifier를 저장할 때 사용하는 Character set이며, 이 값은 섧정 불가능하고 항상 utf8로 설정되어 있다
  • character-set-server
        MySQL 서버의 기본 Character set
  • character_set_client
        MySQL 클라이언트의 기본 Character set
  • character_set_connection
        쿼리 문장에서 인트로듀서가 없는 리터럴 또는 Number를 String으로 변환할 때 사용하는 Character set
  • character_set_database
        MySQL 데이터베이스의 Default Character set
  • character_set_filesystem 
        LOAD DATA INFILE ... 또는 SELECT ... INTO OUTFILE 문장이 실행될 때, 파일의 읽고 쓰기에 사용되는 Character set
  • character_set_results
        MySQL 서버가 쿼리의 처리 결과를 클라이언트로 보낼 때 사용하는 Character set

Server - Client 간의 문자셋 변환
쿼리 실행 요청시
사용자가 요청한 쿼리 문장은 현재 character_set_client인데,
MySQL 서버는 이 쿼리 문장의 문자 셋을 character_set_connection 으로 변환 후 실행
만약, character_set_client와 character_set_connection이 동일할 경우 변환 없음
 
쿼리 결과 전송시
컬럼의 문자셋이 Latin2인데, character_set_results가 Latin1이라면
MySQL 서버는 컬럼의 값을 Latin2에서 Latin1으로 변환해서 리턴하며,
만약, 컬럼과 Character_set_results가 동일한 문자셋이면 변환 없음
 
CHARACTER SET 일괄 변경
SET NAMES 'utf8'; (현재 Connection에서만 효력)
charset utf8;     (Connection이 다시 연결되어도 효력)
명령으로, 아래 3개의 설정을 한번에 변경할 수 있음
 
SET character_set_client = 'utf8';
SET character_set_results = 'utf8';
SET character_set_connection = 'utf8';

 


 

UTF-8 문자 집합은 1~4 바이트까지 저장이 가능하게 설계되었다. (가변 바이트)

 

이모지 저장하기 위해선 4 byte 를 지원하는 문자 집합 이게 필요하다 >>  utf8mb4 

 

Collation (정렬 방식)

latin1 (2바이트), utf8 (가변3바이트), utf8mb4 (가변4바이트)는 저장공간의 크기이다.

위의 것들은 charset 이라고 부른다.

 

Collation 은 텍스트 데이터를 정렬(ORDER BY)할 때 사용한다. 즉 text 계열 자료형에서만 사용할 수 있는 속성이다.

 

* utf8_bin (or utf8mb4_bin)

바이너리 저장 값 그대로 정렬한다.

hex 코드(16진수)로 A 는 41, B 는 42, a 는 61, b 는 62 이기 때문에 다음 순서로 출력된다.

 

* utf8_general_ci (or utf8mb4_general_ci)

텍스트 정렬할 때 a 다음에 b 가 나타나야 한다는 생각으로 나온 정렬방식. 일반적으로 널리 사용된다.

라틴계열 문자를 사람의 인식에 맞게 정렬한다.

바이너리를 한번 가공한 것이다.

 

 

다음은 권장하는 charset 과 collation 설정 값이다.

1) MySQL 5.5.3 이전 = utf8 charset 에, utf8_general_ci collation 사용.

2) MySQL 이 최신일 때 = utf8mb4 charset 에, utf8mb4_unicode_ci collation 사용.

 

'Mysql & Maria > admin' 카테고리의 다른 글

mysql int(10) / bigint(20) 등 괄호 안 숫자의 의미  (0) 2023.07.20
Ascending index vs Descending index  (0) 2023.07.06
[mysql] CHECK TABLE  (0) 2023.05.19
mysql login path설정  (0) 2023.05.19
server에서 sql file 실행  (0) 2023.05.19