2017년 6월 1일 목요일

MySQL 한글 insert시 발생하는 ERROR 1366 (HY000): Incorrect string value: 문제





MySQL 테이블의 특정 필드에 한글을 insert하다보면 아래와 같은 에러가 발생하는 경우를 만날수 있다.
ERROR 1366 (HY000): Incorrect string value: ...

kkk라는 테이블이 아래와 같은 형식으로 생성되어 있다고 가정하면,

mysql> show create table kkk;
+-------+----------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table                                                                                                                                             |
+-------+----------------------------------------------------------------------------------------------------------------------------------------------------------+
| kkk   | CREATE TABLE `kkk` (
  `bdid` bigint(11) unsigned NOT NULL,
  `name` varchar(80) NOT NULL,
  PRIMARY KEY (`bdid`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 |
+-------+----------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

위와 같이 kkk라는 테이블이 있을 경우 DEFAULT CHARSET=latin1으로 되어 있다.
이때 한글을 name 필드에 insert하게 되면 아래와 같은 에러가 발생한다.

mysql> insert into kkk (bdid, name) values (1, '한글입력');
ERROR 1366 (HY000): Incorrect string value: '\xED\x95\x9C\xEA\xB8\x80...' for column 'name' at row 1

이 문제 해결을 위해서는 default character set을 utf8로 변경해 주면 깨끗이 해결된다.
kkk라는 테이블을 생성하는 DDL 문에서 아예 utf8로 설정해서 테이블을 생성해 주면 된다.
다음과 같이

CREATE TABLE `kkk` (
  `bdid` bigint(11) unsigned NOT NULL,
  `name` varchar(80) NOT NULL,
  PRIMARY KEY (`bdid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

댓글 없음:

댓글 쓰기