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 |