A character set is a set of symbols and encodings. A collation is a set of rules for comparing characters in a character set.
문자셋(character set)은 심볼(글자)과 인코딩의 묶음이고, Collation은 문자셋의 문자들을 비교하는 규칙이다.
예를들어 글자 A=0, B=1, a=10, b=11 이라고 할 때 'A'는 글자이고 '0'은 인코딩이다. 여기서 볼 때 'A'와 'a'는 서로 다른 인코딩을 가지므로 다르다고 볼 수 있다.
하지만 만약 대소문자를 구분하지 않는(case insensitive) collation을 지정하면 'A'='a'가 되게 되는 것이다. 대소문자를 지정하지 않는 Collation은_ci
로 끝난다.
/etc/mysql/conf.d/encoding.cnf
, RedHat /etc/my.cnf
)#문자셋 지정 [client] character-sets-dir=utf8 [mysqld] init_connect=SET collation_connection = utf8_general_ci init_connect=SET NAMES utf8 #default-character-set=utf8 # deprecated character-set-server=utf8 collation-server=utf8_general_ci
service mysql restart
참조 :MySQL and UTF-8
Database: (CREATE | ALTER) DATABASE ... DEFAULT CHARACTER SET utf8 Table: (CREATE | ALTER) TABLE ... DEFAULT CHARACTER SET utf8
show variables like 'c%';
결과 –>
character_set_client : utf8 character_set_connection : utf8 character_set_database : utf8 character_set_results : utf8 character_set_server : utf8 character_set_system : utf8 character_sets_dir : /usr/share/mysql/charsets/ collation_connection : utf8_general_ci collation_database : utf8_general_ci collation_server : utf8_general_ci
-- 테이블의 문자셋 정보 확인. INFORMATION_SCHEMA.TABLES or SHOW CREATE TABLE [TABLENAME];
mysql> SET character_set_client = utf8; mysql> SET character_set_results = utf8; mysql> SET character_set_connection = utf8; mysql> ALTER DATABASE [DB명] DEFAULT CHARACTER SET utf8;
create table test (merong varchar(20) collate latin1_general_ci); -- 이렇게 만들어진 테이블에 한글 데이터를 넣은 후 필드를 euckr 로 변경하려면 -- 다음처럼 해야 합니다. alter table test modify merong binary(100); alter table test modify merong varchar(20) collate euckr_korean_ci; -- binary 로 바꾸면 문자셋 특성이 사라지기 때문에 이런 변환과정을 거쳐야 -- 합니다(메뉴얼에 의하면). 그냥 바꾸면 문자들이 손상됩니다.
utf8mb4_general_ci가 더 좋다.
UTF8MB4
로 만들거나,CREATE DATABASE my_db DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
ALTER TABLE TABLE_NAME MODIFY columnName text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
characterEncoding=UTF8
만 가능하다. UTF8MB4는 실존하는 표준 인코딩이 아니므로 명시할 수 없다.characterEncoding
설정을 하지 않고 unicode=true
만 있어도 자동인식한다.initialSql
을 지정하는 방법이 있으므로 그 방법으로 모든 커넥션을 맺을 때마다 해준다.SET names utf8mb4 COLLATE utf8mb4_unicode_ci;