본문 바로가기

Database/mariaDB administrator

mysql 테이블 한글 insert 안될때 조치 방안

mysql 테이블 한글 insert 안될 때 조치 방안

 

안녕하세요.

 

mysql 테이블에 insert 작업을 할때 한글이 입력 안될 때가 있어 난감하신 적이 있으실 겁니다.

 

아래와 같은 에러 메시지와 함께 한글이 안되는 증상이 나타나실 텐데요.

 

Incorrect string value: '\xE3\x84\xB4\xE3\x85\x87...' for column

 

데이터 베이스에서 한글 입력이 불가할 때 생기는 현상입니다.

 

이럴 때는 우선 해당 데이터 베이스의 캐릭터 셋을 확인 해보셔야 합니다.

SELECT schema_name , default_character_set_name
FROM information_schema.schemata ;

위 쿼리를 통해서 데이터 베이스의 케릭터 셋을 확인해보시면 아래와 같은 결과가 나올 겁니다.

여기에서 빨간 박스 안에 character_test라는 database의 캐릭터 셋이 latin1이라고 되어 있는 것을 확인할 수 있습니다.

 

이상태에서 테이블을 한번 만들어 보겠습니다.

create table character_test.test1
(
    text varchar(100)
);

이 테이블에 영문 데이터, 한글 데이터를 순차적으로 insert 해봅니다.

insert into character_test.test1 values ('hello?!');

insert into character_test.test1 values ('안녕하세요');

그러면 첫 번째 insert 문은 잘 입력이 되나, 두번째 한글 데이터는 입력이 되지 않고 에러메시지가 떨어지게 됩니다.

Incorrect string value: '\xE3\x84\xB4\xE3\x85\x87...' for column

 

위 테이블을 select 해보도록 하겠습니다.

select * from character_test.test1;

역시나 첫번째 영문 데이터만 입력이 된 것을 확인할 수 있습니다.

 

그럼 이번에는 캐릭터 셋을 지정해서 테이블을 생성해보도록 하겠습니다.

create table character_test.test1
(
    text varchar(100)
) charset = utf8;

젤 아래 보시면 charset = utf8;이라는 구문이 추가된 것을 보실 수 있습니다.

 

이렇게 만든 상태에서 다시 insert 문을 입력해보도록 하겠습니다.

insert into character_test.test1 values ('hello?!');

insert into character_test.test1 values ('안녕하세요');

그리고 select를 다시 해보겠습니다.

select * from character_test.test1;

그럼 결과는 짜잔!

한글 데이터까지 잘 입력이 된 것을 확인할 수 있습니다.

 

이렇게 테이블 생성 시 캐릭터 셋을 지정 하여 만들수도 있으나, 데이터 베이스를 생성 할때 부터 케릭터셋을 지정하여 만드실수도 있고, 이미 생성된 데이터 베이스라면 alter문으로 케릭터 셋을 변경할 수도 있습니다.

#데이터베이스 생성 시 케릭터셋을 설정해 주는 방법

CREATE DATABASE database_name DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci ;
CREATE DATABASE database_name DEFAULT CHARACTER SET euckr COLLATE euckr_korean_ci ;

#Alter 명령으로 데이터베이스의 케릭터셋을 변경 하는 방법
ALTER DATABASE database_name DEFAULT CHARACTER SET utf8 ;

위와 같은 방법으로 여러분들의 소중한 데이터가 잘 지켜지길 바랍니다.

 

감사합니다!

 

 

by.sTricky