졸업프로젝트

[스타트][Mysql/MariaDB] 한글 insert가 안 된다.

달팽이포뇨 2021. 11. 24. 15:59

이번 학기부터 졸업프로젝트를 시작하게 되었다.

나는 진로를 백엔드로 생각을 하고 있었기 때문에 백엔드를 맡게 되었다.

우리 팀의 주제는 한글과 관련되어있다. 이에 대해서는 앞으로 글로 포스팅 해 나갈 생각이다.

따라서 우리 팀 프로젝트의 DB는 한글 데이터를 저장가능해야한다.

 

하지만 문제가 생겼다.

 

다른 프로젝트에서 MariaDB 10.6을 사용해서 웹 사이트의 DB구축을 하였는데 한글 입력이 되지 않는 것이다.

(참고: 이 때는 해결 된 것처럼 보였지만 이후에 다시 insert하려고 하니 오류가 발생하였습니다. 다음편 참고해주세요!)

이런 식으로 말이다.

(이 화면은 실제 그 프로젝트의 DB 넣을 때 표시된 화면은 아니고 이 한글 입력 안되는 문제를 해결하기 위해 테스트 하던 중에 나타난 화면 중 일부를 캡처한 것이다.)

 

그 프로젝트에서는 웹사이트를 만들 때 한글 또는 영어 둘 중에 하나를 선택할 수 있었고 시간이 여유롭지 않았기 때문에 그냥 영어로 진행했다.

 

하지만 졸업프로젝트에서는 한글 데이터가 필수적이기 때문에 반드시 이 문제를 해결해야했고 그 프로젝트가 끝나고 시도해보았고 문제가 해결되었다.

 

문제 상황을 자세히 설명해보자면, 구글링하면서 my.ini 파일도 수정하고 (나의 환경은 Windows10이다.) table 생성할 때 default charset=utf8로 설정해보기도 하고 database 생성할 때도 default character set utf8 collate utf8_general_ci; 해보고 했는데도 문제는 해결되지 않았다.

 

저 1366 에러가 뜨지 않아서 '데이터가 제대로 들어갔나?' 싶을 때에도 확인해보면

이런 식으로 한글이 깨져서 들어갔었다.

(service_name 컬럼과 menu_name 컬럼에 한글 데이터를 입력했었다.)

 

구글링을 끝까지 해본 결과 

mysql의 character set을 utf8이 아니라 euckr로 해보라는 글이 있었다. (주소는 참고에 기재해놓았다.) 여태까지 구글링 한 모든 결과들은 "utf8로 설정하세요"라고 했었기 때문에 설마하는 마음으로 set character set euckr; 을 입력하였고 insert into 테이블 이름 values (한글 데이터); 입력하였다.

 

그리고 select * from 테이블 이름; 하였더니

한글 데이터가 제대로 들어간 걸 확인할 수 있었다. 

결론

나의 해결방법

1. 구글링 하여서 나오는 utf8 관련 모든 방법을 시도해본다.

(my.ini 파일 수정, default character set utf8 collate utf8_general_ci;, table 생성할 때 default charset=utf8로 설정 등) 

(1) utf8로 my.ini 파일 수정 (예시)

(2) cmd로 mysql 접속 후,

create database 데이터베이스 이름 default character set utf8 collate utf8_general_ci;

입력

 

예시)

(3) create table 테이블 이름 ( 속성1 데이터형 ...  ) default charset=utf8;

입력

예시)

2. show variables like 'c%'; 했을 때, 모두 utf8로 잘 나오는데도 한글 데이터가 insert가 되지 않는다면 set character set euckr;을 입력해본다.

 

예시) show variables like 'c%';

하지만 한글이 입력되지 않는다.

3. 관리자 권한으로 cmd를 실행한다.

4. systeminfo를 입력해본다.

systeminfo를 입력했을 때 영어로 뜬다면 한글 입력이 깨져서 들어가므로 chcp 949를 입력해서 캐릭터 셋을 한글로 바꾼다.

systeminfo를 입력해본다.

예시처럼 나온다면 한글로 잘 바뀐 것이다.

5. mysql에 로그인해서 해당 db에 character set을 euckr로 바꾼다.

6. 한글 데이터를 insert 한다.

7. 성공!

 

모두 오류 원만히 해결되시기를 바랍니다!

 

참고: https://hhyeok1026.tistory.com/7