티스토리 뷰

SET SQL_SAFE_UPDATES=0;


안전모드를 껏고, my.ini에서 utf8로 설정을 바꿨음에도 불구하고 INSERT문이 먹히지 않는 경우가 있다.

이는 데이터베이스를 정의하는 DDL문 마지막에 DEFAULT CHARSET이 laten으로 먹혀 있었기 때문으로, utf8로 만들어주면 깔끔히 해결된다.




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;



출처: http://developer-joe.tistory.com/115 [코드 조각-Android, Java, C#, C, C++, JavaScript, PHP, HTML, CSS, Delphi]

'오늘도 개발자 > MySQL' 카테고리의 다른 글

MySQL 데이터 타입  (0) 2018.12.28
MySQL workbench safe mode 해제하기  (0) 2018.07.16
댓글