레이블이 utf8인 게시물을 표시합니다. 모든 게시물 표시
레이블이 utf8인 게시물을 표시합니다. 모든 게시물 표시

mysql utf8mb4 설정

# 기본적으로 utf8 인코딩은 총 4바이트로 문자를 표현하는데, 
# mysql 에서는 utf8 문자셋은 utf8mb3의 alias 로 총 3바이트를 사용한다.

# 실제 utf8(4byte) 사용을 위해선 utf8mb4 로 명시해야 한다.

# 스키마(db) 문자셋을 utf8mb4로 변경
# collate 는 order by(정렬)에 사용, 이것도 utf8mb4_bin 로 변경
alter schema `ysoftman_db` default character set utf8mb4  default collate utf8mb4_bin ;

# utf8mb4 로 변경된 스키마는 이제 새로운 테이블 생성시 기본 utf8mb4 로 설정한다.
# 하지만 이미 존재하는 테이블은 여전히 utf8 문자셋이다.
# 테이블 문자셋을 utf8mb4 로 변경
alter table `ysoftman_table1` default character set utf8mb4 default collate utf8mb4_bin;

# 컬럼도 필요시 변경
alter table `ysoftman_table1` 
change column `name` `name` varchar(100) character set 'utf8mb4',
change column `desc` `desc` varchar(100) character set 'utf8mb4';

# 보통 emoji 나 기타 특수한 문자를 db 에 저장하지 않아 
# 대부분은 utf8mb3 로 둬도 상관은 없다.
# 참고로 기존 테이블, 컬럼에 인코딩 문자셋을 한번에 변경하는 쿼리는 없어
# 스크립트로 쿼리문을 생성해 실행해야 한다.

Linux locale 상태 파악

# 명령을 사용하면 현재 로케일 설정을 알 수있다.
locale
LANG=ko_KR.euckr
LC_CTYPE="ko_KR.euckr"
LC_NUMERIC="ko_KR.euckr"
LC_TIME="ko_KR.euckr"
LC_COLLATE="ko_KR.euckr"
LC_MONETARY="ko_KR.euckr"
LC_MESSAGES="ko_KR.euckr"
LC_PAPER="ko_KR.euckr"
LC_NAME="ko_KR.euckr"
LC_ADDRESS="ko_KR.euckr"
LC_TELEPHONE="ko_KR.euckr"
LC_MEASUREMENT="ko_KR.euckr"
LC_IDENTIFICATION="ko_KR.euckr"
LC_ALL=ko_KR.euckr

# 사용 가능한 로케일 이름 표시
locale -a

# 사용 가능한 문자 지도 표시
locale -m


#####


# locale 이 다음과 같이 설정된 상태에서
LANG=en_US.UTF-8
LC_CTYPE=UTF-8
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=

# 다음과 같은 에러 발생시
Failed to set locale, defaulting to C

# LC_ALL 을 설정하면 된다.
export LC_ALL=en_US.UTF-8