문서의 선택한 두 판 사이의 차이를 보여줍니다.
양쪽 이전 판 이전 판 다음 판 | 이전 판 | ||
wiki:mariadb:latin1에서_utf8mb4로_변환하기 [2020/04/22 09:56] hylee |
wiki:mariadb:latin1에서_utf8mb4로_변환하기 [2023/01/13 18:44] (현재) |
||
---|---|---|---|
줄 1: | 줄 1: | ||
- | ====== latin1에서_utf8mb4로_변환하기 ====== | + | ====== latin1에서_utf8mb4로_변환하기 |
<WRAP left notice 80%> | <WRAP left notice 80%> | ||
- | * description : Table Encoding | + | * description : Database |
* author | * author | ||
* email : hylee@repia.com | * email : hylee@repia.com | ||
줄 10: | 줄 10: | ||
===== 변환한 이유 ===== | ===== 변환한 이유 ===== | ||
- | > 내부 프로젝트 코** 본문태그 전체를 수집해서 DB에 Insert 할떄 생기는 에러 | + | > 에러내용 (내부 프로젝트 코** 본문태그 전체를 수집해서 DB에 Insert 할떄 생김) |
- | * ERROR 1366 (HY000) : incorrect string value : '' | + | |
+ | * ERROR 1366 (HY000) : incorrect string value : ' | ||
> 분석 | > 분석 | ||
+ | |||
* 소스 중 이모티콘이 포함되어있어 생기는 에러 | * 소스 중 이모티콘이 포함되어있어 생기는 에러 | ||
* 이모티콘 4byte라 이보다 작은 CharacterSet 인 문자 집합으로 인코딩 되어있으면 꺠져서 에러가 난다. | * 이모티콘 4byte라 이보다 작은 CharacterSet 인 문자 집합으로 인코딩 되어있으면 꺠져서 에러가 난다. | ||
> 참고 | > 참고 | ||
+ | |||
* mariaDB utf8은 3byte 이므로 이모티콘을 포함하려면 utf8mb4로 변환해야한다. | * mariaDB utf8은 3byte 이므로 이모티콘을 포함하려면 utf8mb4로 변환해야한다. | ||
* [[https:// | * [[https:// | ||
+ | ===== 작업 순서 ===== | ||
+ | 1. 현재 DB Character Set 을 확인한다. (utf8mb4인지 확인) | ||
+ | 2. DB를 dump 한다. | ||
+ | 3. mariaDB 설정파일에 인코딩 설정을 변경(, 추가) 한다. | ||
+ | 4. dump 파일에 DDL 설정이 utf8mb4인지 확인하고 아니면 utf8mb4로 수정한다. | ||
+ | 5. DB에 dump 파일로 data를 복구한다. | ||
+ | 6. mariaDB 재시작 후 DB 인코딩 확인한다. | ||
+ | | ||
+ | ==== 1. Character Set 확인 ==== | ||
+ | > Table Caracter Set 확인 | ||
+ | <code sql> | ||
+ | SELECT CCSA.character_set_name FROM information_schema.`TABLES` T, | ||
+ | information_schema.`COLLATION_CHARACTER_SET_APPLICABILITY` CCSA | ||
+ | WHERE | ||
+ | CCSA.collation_name = T.table_collation | ||
+ | AND | ||
+ | T.table_schema = " | ||
+ | AND | ||
+ | T.table_name = " | ||
+ | </ | ||
+ | |||
+ | * [[https:// | ||
+ | |||
+ | |||
+ | ==== 2. Database dump ==== | ||
+ | |||
+ | |||
+ | <code bash> | ||
+ | |||
+ | [root@mysql ~]# mysqldump -uroot -p ${Database Name} -r ${Backup File Name}.sql | ||
+ | Password: | ||
</ | </ | ||
- | ===== 중요 | + | |
- | | + | ==== 2-1. Dump File Encoding 확인 |
- | ===== 결과 출력 | + | |
- | | + | * file -bi를 하면 그 파일의 인코딩이 확인된다. |
+ | * Dump파일이 utf8 이여야지 DB를 utf9mb4로 변환했을때 깨짐없이 들어간다. | ||
+ | <code bash> | ||
+ | | ||
+ | </ | ||
+ | |||
+ | ==== 3. mariaDB 설정파일에 인코딩 설정 추가 ==== | ||
+ | > 위치 | ||
+ | * / | ||
+ | > 추가 | ||
+ | <code bash> | ||
+ | # | ||
+ | # This group is read both both by the client and the server | ||
+ | # use it for options that affect everything | ||
+ | # | ||
+ | [client-server] | ||
+ | |||
+ | # | ||
+ | # include all files from the config directory | ||
+ | # | ||
+ | [mysqld] | ||
+ | default_storage_engine=innodb | ||
+ | innodb_buffer_pool_size=445M | ||
+ | innodb_log_file_size=50M | ||
+ | max_connections | ||
+ | connect_timeout = 600 | ||
+ | wait_timeout = 6000 | ||
+ | max_allowed_packet = 2G | ||
+ | thread_cache_size = 128 | ||
+ | sort_buffer_size = 4M | ||
+ | bulk_insert_buffer_size | ||
+ | tmp_table_size | ||
+ | max_heap_table_size = 32M | ||
+ | default_storage_engine = InnoDB | ||
+ | innodb_buffer_pool_size = 4G | ||
+ | innodb_log_buffer_size | ||
+ | innodb_file_per_table | ||
+ | innodb_file_format | ||
+ | innodb_open_files | ||
+ | innodb_io_capacity | ||
+ | innodb_flush_method | ||
+ | |||
+ | character-set-server=utf8mb4 | ||
+ | collation-server=utf8mb4_general_ci | ||
+ | |||
+ | [client] | ||
+ | port=${Port} | ||
+ | default-character-set = utf8mb4 | ||
+ | |||
+ | [mysqldump] | ||
+ | default-character-set | ||
+ | |||
+ | [mysql] | ||
+ | default-character-set | ||
+ | |||
+ | !includedir /etc/my.cnf.d | ||
+ | |||
+ | </ | ||
+ | |||
+ | |||
+ | ==== 4. dump 파일 DDL ==== | ||
+ | * Dump 파일을 열어보면 DDL 코드가 있다. | ||
+ | <code sql> | ||
+ | |||
+ | DROP TABLE IF EXISTS `${Table name}`; | ||
+ | /*!40101 SET @saved_cs_client | ||
+ | /*!40101 SET character_set_client = utf8 */; | ||
+ | CREATE TABLE `${Table name}` | ||
+ | `${column}` ${type} NOT NULL, | ||
+ | `${column}` ${type} DEFAULT NULL, | ||
+ | `${column}` ${type} DEFAULT NULL, | ||
+ | `${column}` ${type} DEFAULT NULL, | ||
+ | `${column}` ${type} DEFAULT NULL, | ||
+ | PRIMARY KEY (${column}`) | ||
+ | ) ENGINE=InnoDB DEFAULT CHARSET=utf8; | ||
+ | |||
+ | </ | ||
+ | * 위 DDL을 보면 마지막에 '' | ||
+ | |||
+ | ==== 5. DB에 dump 파일로 data를 복구한다. | ||
+ | |||
+ | | ||
===== Ref ===== | ===== Ref ===== | ||
- | * [[https:// | + | |
- | {{tag> | + | {{tag> |