[GCP] RedHat 7에서 mariaDB 설치, 인코딩(character-set), 문자정렬(collation) 변경하기

2024. 2. 4. 16:08IT 공부/GCP

VM 스펙

머신 유형 : n2-standard-2 (vCPU 2개, 코어 1개, 메모리 8GB)

운영체제 : Red Hat Enterprise Linux 7

 

 

1. root 계정 설정

# root 계정 비밀번호 설정
sudo passwd

# 접속 계정 비밀번호 설정
su root
passwd 계정명

 

 

2. mariaDB 설치

# mariaDB 설치
yum install mariadb-server

# mariaDB 실행
systemctl start mariadb

# mariaDB 서비스 등록
systemctl enable mariadb
또는
systemctl enable mariadb.service

# mariaDB 서비스 등록 조회
systemctl list-unit-files | grep mariadb

# mariaDB 초기 설정
mysql_secure_installation

참고 : https://access.redhat.com/documentation/ko-kr/red_hat_enterprise_linux/9/html/configuring_and_using_database_servers/installing-mariadb_using-mariadb
참고 : https://min-nine.tistory.com/entry/Linux-Red-hat-centOS-%EA%B3%84%EC%97%B4-%EB%A6%AC%EB%88%85%EC%8A%A4%EC%97%90%EC%84%9C-mariaDB-%EC%84%A4%EC%B9%98%ED%95%98%EA%B8%B0

 

 

3. mariaDB 접속

# mariaDB 접속
mysql -uroot -p

# mariaDB 버전 확인
select version();

참고 : https://java119.tistory.com/61

 

 

4. 기본 설정

# 외부 IP에서 접속 허용
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '비밀번호';

 

 

5. 문자셋(인코딩), 문자정렬 설정

mariaDB의 기본 인코딩 설정은 latin1 이기에 한글 데이터 입력시 깨질 우려가 있다. 

따라서 설치 직후 시스템의 인코딩을 변경함이 바람직하다. 

# Database 문자셋, 문자정렬 설정 조회
SELECT	schema_name, 
	default_character_set_name,
        default_collation_name
FROM information_schema.schemata;

# Table 문자셋과 문자정렬 조회
show create table 테이블명;

# 시스템에서 설정된 문자셋 설정 조회
show variables like '%char%';
# character_set_database과 character_set_server의 값이 latin1일 경우 utf8 또는 utf8mb4 변경 권장
# 데이터에 이모지가 들어갈 경우엔 utf8mb4로 변경 (이모지가 4바이트이기 때문)

# 지원하는 문자셋, 문자정렬 목록 조회
show character set;

collation은 문자정렬을 뜻하며 int나 datetime이 아닌 text 계열 자료형에서 서로 어떻게 비교하여 정렬(order by)할 지에 대한 규칙이다. 

character set마다 여러 collation이 있으며 설정값에 따라 소문자부터 정렬하거나, 자음부터 정렬하거나, 이모지순서를 구분하게 된다. 

 

 

# Table 컬럼별 문자정렬 설정 조회
show full columns from 테이블명;

collation은 테이블 단위 뿐만 아니라 컬럼 단위로도 다르게 설정할 수 있다. 만약 테이블끼리 join 할 때 on 절에서 쓰는 컬럼의 collation이 다를 경우 에러가 발생할 수 있으며, index가 설정되어 있어도 사용하지 못할 수 있다. 

   ex) utf8_general_ci 와 utf8_unicode_ci 를 join시 에러

이 경우, on 절에서 사용하는 컬럼의 collation을 동일하게 변경하면 에러가 발생하지 않는다. 

 

참고 : https://sshkim.tistory.com/128

참고 : https://blog.naver.com/sory1008/223071678680

참고 : https://hardlearner.tistory.com/387

참고 : https://bluesmile-dev.tistory.com/10

참고 : https://jadehan.tistory.com/55

 

 

DB 설치 후 시스템 상 문자셋을 변경하고 데이터베이스 생성단계에서 문자셋과 문자정렬을 지정하면 가장 바람직하다고 보인다. 

# 데이터베이스 생성시 문자셋과 문자정렬 지정
CREATE DATABASE '데이터베이스명' DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;

 

데이터베이스 생성 후 변경이 필요할 경우 아래 쿼리를 사용하면 된다. 

# Database 문자셋 설정 변경
ALTER DATABASE 데이터베이스명 DEFAULT CHARACTER SET utf8mb4;

# Database 문자정렬 설정 변경
ALTER DATABASE 데이터베이스명 COLLATE utf8mb4_bin;

# Database 문자셋과 문자정렬 같이 변경
ALTER DATABASE 데이터베이스명 CHRACTER SET utf8mb4 COLLATE utf8mb4_bin;

# Table 문자셋 설정 변경
ALTER TABLE 테이블명 CONVERT TO CHARACTER SET utf8mb4;

# Table 문자셋과 문자정렬 같이 변경
ALTER TABLE 테이블명 CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;

참고 : https://bskyvision.com/entry/MariaDB-%ED%95%9C%EA%B8%80-%EB%8D%B0%EC%9D%B4%ED%84%B0-%EC%82%BD%EC%9E%85-%EA%B0%80%EB%8A%A5%ED%95%98%EA%B2%8C-%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B2%A0%EC%9D%B4%EC%8A%A4-%EC%83%9D%EC%84%B1%ED%95%98%EA%B8%B0

 

 

만약 계정 권한 등의 문제로 설정 변경이 적용되지 않을 경우, SQL 내에서 일시적으로 CONVERT 하는 방법도 있다. 

# 데이터에 따라 euckr이나 utf8 둘 중 특정 문자셋만 정상적으로 출력될 수도 있다. 
convert(convert(컬럼명 using binary) using utf8mb4) as 컬럼명
convert(convert(컬럼명 using binary) using euckr) as 컬럼명

# 데이터에 큰따옴표 " " 가 포함되어 있을 경우 작은따옴표 ' '로 변경이 필요할 수도 있다. 
replace(convert(convert(컬럼명 using binary) using utf8mb4), '"', '\' ') as 컬럼명
replace(convert(convert(컬럼명 using binary) using euckr), '"', '\' ') as 컬럼명

 

반응형