일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- stack
- 스레드
- web
- trunc()
- netstat
- cpu
- ssd
- HDD
- 스케줄 삭제
- HashMap
- trunc(sysdate)
- 이진탐색트리
- ArrayList
- 정렬
- 오라클 trunc()
- 멀티스레드
- null
- heap
- 오라클 버림 함수
- queue
- trunc(date)
- git push
- 프로세스 종료
- maven
- MAP
- desc
- Servlet
- url
- Git
- RAM
- Today
- Total
無테고리 인생살이
MySQL 테이블에 한글 insert 실패 원인와 해결 방법 (feat. Incorrect string value : '\xEC..) 본문
MySQL 테이블에 한글 insert 실패 원인와 해결 방법 (feat. Incorrect string value : '\xEC..)
無격 2023. 6. 24. 16:43- 에러 발생 과정
- 발생 에러 (Incorrect string value : '\xEC..)
- 원인
- 해결 방법
이전 글에서 Ubuntu 원격 서버에 MySQL 설치 및 외부 접속을 진행하였습니다.
에러 발생 과정
위 과정이 완료되고 프로젝트에 필요한 더미데이터를 추가하기 위해,
로컬 Workbench로 MySQL DB 서버에 접속한 뒤 진행 중인 프로젝트의 ERD를 기준으로 아래와 같이 데이터베이스, 테이블 생성하였습니다.
생성한 category 테이블에 아래와 같이 더미데이터를 insert 하는 과정에서 에러가 발생했습니다.
발생 에러
Incorrect string value : '\xEC\xB9\x98\xED\x82\xAC...' for column 'name'
원인
'카페, 치킨..' 등의 한글 문자열이 '\xEC\xB9\..' 로 형태가 바뀌었으므로, 인코딩 관련 에러인 것을 알 수 있습니다.
구글링을 해본 결과 MySQL의 default character set은 버전마다 다르다고 합니다.
(MySQL 5.7 이하 : latin1 / MySQL 8 : utf8mb4)
원격 접속 프로그램인 PuTTY로 원격 서버에 설치된 MySQL 버전과 기본 캐릭터 셋을 확인해 보겠습니다.
1. MySQL 버전 확인
2. MySQL default character set 확인
=> MySQL 5.7 버전이라 당연히 기본 캐릭터 셋은 latin1이었고, 이게 한글 문자열 insert 에러의 원인이었던 것 !
해결 방법
1. 데이터베이스 DROP 후, 다시 생성
create database 데이터베이스명 character set utf8mb4 collate utf8mb4_unicode_ci;
- 테이블에 데이터가 많이 없는 경우 사용합니다.
- 생성되는 테이블들은 utf8mb4 캐릭터 셋이 자동 적용됩니다.
2. 데이터베이스 캐릭터 셋 수정
alter database 데이터베이스명 character set utf8mb4 collate utf8mb4_unicode_ci;
alter table 테이블명 convert to character set utf8mb4 collate utf8mb4_unicode_ci;
- 테이블에 이미 많은 데이터가 존재할 경우 사용합니다.
- 데이터베이스 캐릭터 셋을 수정해도 이미 존재하는 테이블에 자동 적용되지 않기 때문에, 테이블도 동일하게 수정해야 합니다.
3. MySQL 설정 파일에서 기본 캐릭터 셋 수정
주의※ : 운영체제에 따라 MySQL의 설정 파일이 위치하는 디렉토리와 파일명이 다릅니다. (Ubuntu, MySQL 5.7 기준으로 설명)
3-1. 설정 파일 불러오기 (vi /etc/mysql/mysql.conf.d/mysqld.cnf)
3-2. 아래 내용 추가
[mysqld] collation-server = utf8mb4_unicode_ci character-set-server = utf8mb4 skip-character-set-client-handshake |
3-3. mysql 재시작 (service mysql restart)
3-4. 캐릭터 셋 수정 확인
'gift-card-flea-market' 카테고리의 다른 글
MySQL Replication으로 DB 이중화하기 (feat. mysql replication 동작방식) (0) | 2023.09.21 |
---|---|
static 필드에 @Value가 동작하지 않는 이유 (2) | 2023.08.01 |
서버 재부팅시, redis-server inactive(dead) 상태인 문제 해결 (0) | 2023.06.28 |
Ubuntu 원격 서버에 MySQL 서버 설치 & 외부에서 Workbench로 DB 접속 (0) | 2023.06.23 |
Spring Boot 프로젝트 생성 및 GitHub 업로드 (feat. IntelliJ Community, Spring Initializr) (1) | 2023.04.19 |