잠시만 기다려 주세요

     '이태원 150명 넘게 죽은 핼러윈 참사.. 오세훈 탄핵.. 윤석열 탄핵.... 행안부 장관 이상민은 사람이냐... 말만 하면 책임 회피..'
전체검색 :  
이번주 로또 및 연금번호 발생!!   |  HOME   |  여기는?   |  바다물때표   |  알림 (17)  |  여러가지 팁 (1078)  |  추천 및 재미 (158)  |  자료실 (24)  |  
시사, 이슈, 칼럼, 평론, 비평 (706)  |  끄적거림 (138)  |  문예 창작 (716)  |  바람 따라 (75)  |  시나리오 (760)  |  드라마 대본 (248)  |  
살인!


    mariadb, mysql

mariadb, mysql - mariadb, mysql 문자셋(Character set) 과 콜레이션(Collation) 문자셋, 정렬....
이 름 : 바다아이   |   조회수 : 45         짧은 주소 : https://www.bada-ie.com/su/?OKJX3pg7ho7Y
쿼리를 수행할 때 조건절이나 조인 시 문자열을 비교할 때, 각 테이블 및 칼럼의 문자정렬(Collaction)이 일치하지 않다면 쿼리 성능 저하가 올 수 있습니다.
그만큼, 문자셋과 문자정렬 방법은 모두 동일하게 운영하는 것이 좋습니다.

이번에는  MariaDB의 문자셋(Character Set)과 문자정렬(Collaction)에 대해서 작성해 보도록 하겠습니다.

문자셋(Charset)

MariaDB에서 문자셋은 데이터베이스에서 사용되는 문자의 인코딩을 정의하는 것입니다.
문자셋은 데이터를 검색하거나 문자를 저장할 때 어떻게 문자를 표현할지 결정합니다. 
 
MariaDB에서는 다양한 문자셋을 지원하며, 어떤 문자셋을 선택할지는 주로 데이터의 종류, 다국어 지원 여부, 성능, 저장 공간 효율 등을 고려해서 결정됩니다.

문자셋 내용
UTF-8 - 가변 길이 문자 인코딩이며 전 세계 대부분의 문자를 표현할 수 있습니다.
- ASCII 와 호환되며, 라틴 문자는 1byte로, 다국어 문자는 2byte 이상으로 인코딩됩니다.
- 웹개발시 가장 권장되는 문자셋 중 하나입니다.
UTF-16 - 16bit 단위로 문자를 표현합니다.
- 라틴 문자는 2byte로, 다국어 문자는 2byte 또는 4byte로 인코딩됩니다.
- 다국어 데이터베이스에서 사용되는 경우가 많습니다.
UTF-32 - 32bit 단위로 문자를 표현합니다.
- 모든 문자를 4byte로 인코딩하므로 물리적인 저장 공간 측면에서 비효욜적일 수 있습니다.
EUC-KR - 한국어 문자를 표현할때 사용되는 문자셋입니다.
- 주로 한국에서 사용됩니다.
ISO-8859-1 (Latin-1) - 서유럽 언어를 위한 문자셋이며, 유럽 주요 언어의 문자를 포함합니다.
- ASCII 와 동일하게 1byte로 문자를 나타냅니다.

 
참고로, 웹개발하다 보면 한글이 깨져서 노출되는 경우가 많은데, 대부분의 경우 문자셋이 많지 않아서 생기는 일이 많습니다.
파일 인코딩과 Request, Response 시 인코딩을 동일하게 설정하면 대부분의 한글 관련 깨지는 현상은 해결되곤 합니다.
 
MariaDB에서는 UTF8, UTF8mb3, UTF8mb4 로 문자 인코딩을 설정하기도 하는데, 그럼 이 차이는 뭘까요?
 
1) UTF-8 (utf8)

  • 이전 버전의 Mysql 에서 3byte까지의 문자만 지워하였으며, 4byte로 인코딩 된 문자를 처리할 수 없습니다.

2) UTF-8mb3 (utf8mb3)

  • utf8과 구문적으론 같지만, 명시적으로 3byte 인코딩을 의미합니다.

3) UTF-8mb4 (utf8mb4)

  • 4byte로 인코딩 된 모든 유니코드 문자를 지원합니다.
  • 기본 다국어 평면 이외의 이모지나 일부 특수문자도 처리할 수 있습니다.
  • 국제 표준으로, 대부분의 경우 권장되는 문자셋입니다.

 

문자 정렬(Collaction)

콜레이션(Collaction), 즉 문자 정렬은 데이터를 정렬할 때 문자의 순서를 결정하는 방식을 의미합니다.
문자를 비교하거나 정렬할 때, 어떤 규칙을 따를지를 결정합니다.
 
MariaDB에서는 문자 데이터를 비교하는 데 사용되며, 대소문자 구분 여부, 문자의 가중치, 악센트의 처리 등을 조절할 수 있습니다. 
 
MariaDB에서는 여러 가지 문자 정렬을 제공하는데, 그중 utf8mb4_bin을 특별한 문자 정렬로 주목받고 있습니다.

문자 정렬 내용
utf8mb4_bin - 대소문자를 엄격하게 구분합니다.
- 이진(binary) 데이터와 같은 비트 수준의 정확한 비교가 필요한 경우에 사용됩니다.
utf8mb4_general_ci - 대소문자를 구분하지 않습니다.
- 알파벳 이외의 문자들은 일반적인 유니코드 정렬 규칙을 따릅니다.
utf8mb4_unicode_ci - 대소문자를 구분하지 않습니다.
- 유니코드의 정교한 정렬 규칙을 따릅니다.

 
결론적으로 여러 가지 비교를 해보았을 때 MariaDB에서는 문자셋은 utf8mb4, 문자정렬은 utf8mb4_bin 으로 권장되는 듯합니다.

개인적으로 추천은 문자셋은 utf8mb4, 문자정렬은 utf8mb4_general_ci  를 추천합니다.
대소문자는 굳이 특별한 경우 아니면 구별하지 않는 게 맞는 것 같고 정렬은 utf8mb4_general_ci 가 속도가 좀더 나은 걸로 알고 있습니다.
물론 본인들의 필요한 용도에 따라 조금씩 달라질 수 있습니다. 나는 다 구분해서 세밀화 할거여!! 이러면 utf8mb4_bin 하시면 됩니다.

 

데이터베이스 생성 시 설정하기

실제로 데이터베이스 생성시 기본 문자셋을 utf8mb4로 문자정렬은 utf8mb4_bin으로 생성해 보도록 하겠습니다.
아래의 DDL(Data Definition Language) 명령어를 실행하면 됩니다.

CREATE DATABASE `testdb2024` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;

 
만약에 이미 생성된 데이터베이스라면, 어떤 문자셋과 문자정렬로 생성된 지 확인해 보도록 하겠습니다.

SHOW CREATE DATABASE testdb2024;
 

데이터베이스 문자셋 및 문자정렬 변경방법

문자셋만 변경하기

ALTER DATABASE testdb2024 CHARACTER SET utf8mb4;

 
문자정렬만 변경하기

ALTER DATABASE testdb2024 COLLATE utf8mb4_bin;

 
문자셋과 문자정렬 같이 변경하기

ALTER DATABASE testdb2024 CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;

 
 

테이블의 문자셋 및 문자정렬 변경방법

테이블을 생성할 때의 문자셋과 문자정렬은 기본적으로 데이터베이스의 기본값으로 생성되도록 되어 있습니다.
데이터베이스의 문자셋과 문자정렬이 utf8mb4, utf8mb4_bin으로 설정이 되어 있다면 테이블도 마찬가지로 같은 설정으로 생성이 됩니다.
 
데이터베이스의 기본값과 달리 문자셋과 문자정렬이 다르게 설정되어 있는 테이블이 있다면 통일시켜줘야 합니다.
 
이미 생성된 테이블의 문자셋과 문자정렬 확인하기

SHOW CREATE TABLE tb_user;

 
테이블의 문자셋과 문자정렬 같이 변경하기

ALTER TABLE tb_user CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;

 
 

결론

  1. MariaDB에서 데이터베이스나 테이블을 생성할 땐 가급적이면 문자셋은 utfmb8, 문자정렬은 utf8mb4_bin 으로 기본 설정 및 생성하도록 합니다.
  2. 운영 중인 데이터베이스에서 문자셋 및 문자정렬이 다른 테이블이 있는지 확인해 보고, 만약 틀린 게 있다면 성능향상을 위해서 모두 일치하도록 변경해 주는 것이 좋습니다.
  3. 데이터베이스에는 많은 중요한 데이터가 있기에 반드시 테스트환경에서 충분히 테스트 후 운영환경에 반영하여야 합니다.


출처 : https://hyangtech.tistory.com/entry/MariaDB의-Character-Set-및-Collation-종류-및-변경-방법

 
| |





      1 page / 2 page
번 호 카테고리 제 목 이름 조회수
37 mariadb, mysql mariadb, mysql max_connections , ,   .... my.cnf  바다아이 2
36 mariadb, mysql mariaDB,MYsql , 바다아이 2
현재글 mariadb, mysql mariadb, mysql (Character set) (Collation) , .... 바다아이 46
34 mariadb, mysql mariadb 11.4 root ... 바다아이 72
33 mariadb, mysql Mysql, mariadb The table '' is full 바다아이 2335
32 mariadb, mysql Mariadb MySQL , mysql mariadb ... , mariadb mysql ... , mariadb , mysql ... 바다아이 2238
31 mariadb, mysql MariaDB , ... 바다아이 2854
30 mariadb, mysql MYSQL Locked , , 바다아이 7006
29 mariadb, mysql MySQL - LOCK , MyISAM , , 바다아이 5692
28 mariadb, mysql mysql Index , 바다아이 8357
27 mariadb, mysql MySQL DB , 바다아이 13508
26 mariadb, mysql mysql, mariadb , , , , left, substring, right, concat 바다아이 11512
25 mariadb, mysql mysql, mariadb DISTINCT GROUP BY 바다아이 11764
24 mariadb, mysql mysql 5.x my.cnf 바다아이 9956
23 mariadb, mysql mysql lock , 바다아이 10926
22 mariadb, mysql , MySQL, mariadb , 바다아이 11095
21 mariadb, mysql mysql , , , unixtime 바다아이 14420
20 mariadb, mysql Mysql , Join (Left, Right, Outer, Inner Join) 바다아이 9676
19 mariadb, mysql mariadb, MySQL 17 바다아이 12300
18 mariadb, mysql mysql, mariadb 바다아이 10156
17 mariadb, mysql mysql .. time 바다아이 9542
16 mariadb, mysql Mysql(MariaDB) ? 바다아이 10605
15 mariadb, mysql [MySQL] ,insert 바다아이 10811
14 mariadb, mysql [MySQL] - SQL 바다아이 10314
13 mariadb, mysql MySQL JOIN UPDATE 바다아이 10071
12 mariadb, mysql mysql update 바다아이 10683
11 mariadb, mysql mysql storage engine myisam vs innodb 바다아이 9981
10 mariadb, mysql Mysql Replication Master DB Slave DB 바다아이 10584
9 mariadb, mysql Mysql 바다아이 9761
8 mariadb, mysql MySQL Partition , 바다아이 12374
| |









Copyright ⓒ 2001.12. bada-ie.com. All rights reserved.
이 사이트는 리눅스에서 firefox 기준으로 작성되었습니다. 기타 브라우저에서는 다르게 보일 수 있습니다.
[ Ubuntu + GoLang + PostgreSQL + Mariadb ]
서버위치 : 오라클 클라우드 춘천  실행시간 : 0.05806
to webmaster... gogo sea. gogo sea.