본문 바로가기

Back-End/SQL

[Mysql] 한글 깨짐 해결

heidiSQL을 통해 mysql 세션에 접속해서 실행하는 중이었다. 그러나 insert문이 계속 오류가 뜨길래 제대로 오류문을 봤더니 아래와 같이 한글 값이 깨져서 들어간 점을 발견. 

/* SQL 오류 (1366): Incorrect string value: '\xEC\xB6\x95\xEA\xB5\xAC...' for column 'bookname' at row 1 *

이를 해결하기 위해서는 일단 mysql이 어떤 타입의 인코딩으로 설정되어 있는지를 확인해야 합니다.
관리자 모드로 cmd를 켜주신 다음, mysql을 실행하기 위해 MySQL Server 5.7(혹은 8.0)이 있는 경로로 들어갑니다.

mysql 설치 경로로 이동, mysql server 폴더 cd C:\Program Files(혹은 x86)\MySQL\MySQL Server 5.7
bin 폴더로 경로 이동 cd bin
mysql root계정으로 로그인 시도, 패스워드 입력  mysql -u root -p
mysql 상태 확인 status

status로 characterset을 확인해보시면 latin1과 euckr로 구성되어 있음을 확인할 수 있습니다.
이 부분들이 utf-8로 바뀌어야 제대로 인코딩이 되어 값을 넣을 수 있습니다.

My.ini 파일이 있는 경로로 들어가줍니다. 저의 경우 ProgramData경로에 있습니다. 
My.ini파일은 mysql에서 설정하는 정보가 들어있는 설정 파일입니다.

My.ini파일을 메모장으로 열어줍니다.

my.ini파일에서 가능하면 아무것도 건들지말고 아래 내용을 복사/붙여넣기로 추가해줍니다.



[client]
default-character-set=utf8

[mysqld]
collation-server = utf8_unicode_ci
character-set-server = utf8
skip-character-set-client-handshake

[mysql]
default-character-set=utf8

[mysqldump]
default-character-set=utf8


실행 -> [services.msc]입력 ->[MySql 재시작]
설정 파일을 제대로 적용되었음을 확인하기 위해 MySql을 재시작합니다.
 

다시 cmd로 들어가 맨 처음 mysql폴더로 이동해서 로그인한 것과 동일한 방식으로 실행합니다.
mysql 접속 후 status 명령어를 입력하면 characterset이 utf-8로 바뀐 것을 확인할 수 있습니다.

여기서 유의해야 할 것은, 이미 생성한 database와 table은 인코딩 타입이 바뀌지 않고 새로 생성한 database와 table만 적용이 됩니다. 즉, 이미 생성한 database와 table은 직접 쿼리문을 통해 인코딩 타입을 utf-8로 바꾸어 주어야 합니다.


alter database madang default character set UTF8;

Query OK가 실행 결과로 뜬다면, 제대로 적용이 되었습니다. 
특정 데이터베이스의 한글 깨짐 문제를 해결한 뒤에도 실행 -> [services.msc]입력 ->[MySql 재시작] 을 해야 합니다.

'Back-End > SQL' 카테고리의 다른 글

[Mysql]HeidiSQL UTF-8 설정, 한글 깨짐  (0) 2021.11.26