문서의 선택한 두 판 사이의 차이를 보여줍니다.
| 양쪽 이전 판 이전 판 다음 판 | 이전 판 | ||
|
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> |