MySQL DB 에 한글 utf8 문자열 INSERT 오류 해결 방법

by 조쉬 posted Jul 18, 2018
?

단축키

Prev이전 문서

Next다음 문서

ESC닫기

크게 작게 위로 아래로 댓글로 가기 인쇄

MS 윈도우에 MySQL 을 기본 설치한 후, MySQL DB 에 한글 utf8 문자열 INSERT 할 때에 오류가 발생하는 문제를 해결 방법은 다음과 같습니다.


* 테이클의 default charset 을 utf8 로 설정한다.

 - 테이블의 default charset 을 utf8 로 설정하여서 생성하는 SQL 문 예제는 다음과 같다.


CREATE TABLE  noticeboard (
  `nbId` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `nbSubject` varchar(255) NOT NULL,
  `nbContent` text NOT NULL,
  `nbReadCount` int(10) unsigned NOT NULL DEFAULT '0',
  `nbInsertDate` datetime NOT NULL,
  PRIMARY KEY (`nbId`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;


* MySQL DB 연결시 character-set 을 "utf8" 로 설정한다.

 - MySQL Client API 에서는 MySQL DB 연결된 후, character-set 을 "utf8" 로 수정한다.

 - MySQL JDBC 에서는 MySQL url 에 아래와 같이 utf8 을 설정한다.

   jdbc:mysql://127.0.0.1:3306/spring?useUnicode=yes&characterEncoding=UTF-8


위와 같이 설정하시면 MySQL 서버의 my.ini 파일을 수정하지 않으셔도 정상적으로 utf8 문자열이 저장되는 것 같습니다. 아래의 그림은 위와 같이 설정한 상태에서 MySQL C API 및 MySQL JDBC 로 utf8 한글을 입력한 결과입니다.




위와 같이 설정하여도 MySQL DB 에 utf8 문자열 INSERT 오류가 발생한다면 테이블 컬럼의 charset 을 확인해 보세요. 즉, 아래와 같이 nbSubject 컬럼에 "CHARACTER SET latin1" 으로 설정되어 있다면 nbSubject 컬럼에 utf8 문자열을 입력시 오류가 발생하게 됩니다. 이 경우에는 컬럼에 설정된 "CHARACTER SET latin1" 항목을 모두 제거하면 정상적으로 utf8 문자열이 INSERT 됩니다.


CREATE TABLE  noticeboard (
  `nbId` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `nbSubject` varchar(255) CHARACTER SET latin1 NOT NULL,
  `nbContent` text CHARACTER SET latin1 NOT NULL,
  `nbReadCount` int(10) unsigned NOT NULL DEFAULT '0',
  `nbInsertDate` datetime NOT NULL,
  PRIMARY KEY (`nbId`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;