Computer Science/Etc

MySQL에서 sql 파일로 데이터 추가 시 한글 깨짐 문제(feat:명령프롬프트)

TwinParadox 2020. 11. 2. 19:25
728x90

Workbench 같은 좋은 SQL 관련 프로그램들이 많이 나와 있어서 흑백 바탕에 무언가를 입력하는 사람들이 많이 줄어든 것 같다. 그래도 아직까지는 명령어가 편한 사람들이 많고, 특히 입문자들은 명령 프롬프트(cmd.exe)를 이용해서 mysql에 접속해서 쿼리를 날리는 것 같다.

 

MySQL 대부분의 인코딩 문제는 인코딩 관련 설정 문제라서 관련 글들을 참조하면 잘 해결할 수 있다.

보통의 경우 UTF-8로 데이터를 설정하는데 설정 문제에서 해결을 보면 좋지만, 그게 아닌 경우가 간혹 있다.

예를 들어, sql 파일을 source 명령어로 실행하는 경우라면 입력 데이터와 DB의 인코딩 설정이 문제가 아닐 수가 있다.

 

분명 모든 설정들, SQL과 입력되는 데이터까지 UTF-8로 인코딩이 되어 있는 상황이고,

MySQL에 접속해서 source 명령어를 이용해서 A.sql이라는 파일을 통해 데이터를 입력했다.

그리고 설레는 마음에 테이블을 찍어보면, 테이블에 온갖 깨진 문자가 들어 있다.

위와 같은 상황이라면, 다른 것들을 모두 문제를 찾을 수 없는 상황이라면 이 글이 도움이 될 것이라고 생각한다.

각설하고 이야기하면,

 

다른 것이 문제가 아니고 명령 프롬프트의 인코딩이 문제다.

 

명령 프롬프트의 기본 인코딩은 다음과 같이 949 (ANSI/OEM - 한국어)로 되어 있다.

 

명령 프롬프트 인코딩 형태

sql 파일을 읽어와서 이 녀석이 깨 먹은 인코딩으로 집어넣고 있으니 테이블에는 UTF-8로 인코딩 되었던 데이터가 왕창 깨진 형태로 들어가는 것이다. 이럴 때는 별 거 없이 명령 프롬프트를 UTF-8로 변경해주면 된다. 다음 명령어를 명령 프롬프트에 입력하자.

 

chcp 65001

 

 

chcp 65001을 입력한 화면

 

65001로 변경한 상태에서의 명령프롬프트 속성

 

이렇게 변경된 상태에서 MySQL에 접속해서 source 명령어를 통해 sql 파일을 실행하고 데이터를 테이블에 기록하면 인코딩이 전혀 깨지지 않는다. 필요한 경우에 계속 이렇게 들어가서 해줘야 한다.

명령 프롬프트로 직접 데이터를 테이블에 INSERT할 땐 문제없이 잘 돌아갔었는데, 그땐 안 깨지더니 sql 파일을 실행해서 깨지는 것으로 보아, 파일을 실행해서 읽어오는 과정에서 인코딩 문제로 이미 깨진 데이터가 다시 UTF-8에 맞게 들어가면서 발생한 것 같다.

 

참고로, 이 설정은 명령 프롬프트에 별도의 설정을 해주지 않으면 계속 인코딩이 기본 설정인 949로 지정이 되니, 이런 작업이 있을 때마다 chcp 65001로 인코딩을 변경해주고 들어가야 한다.

728x90