2017년 6월 20일 화요일

Data too long for column 에러 해법 : MySQL의 sql_mode 변경하기





MySQL table에 데이터를 insert하다보면  
Data truncation: Data too long for column '에러가_발생한_필드' at row 1
과 같은 에러를 만나는 경우가 있다.

에러 메시지 자체만 놓고 보면 특정 필드(column)의 선언된 크기보다 insert 될 데이터의 크기가 더 크기 때문으로 보인다.
그런 경우도 있으나 MySQL의 환경 설정상의 원인으로 인한 경우도 있다.
MySQL의 mode가 STRICT인 경우에 위와 같은 에러가 빈번히 발생할수 있다.

MySQL의 설정 파일인 my.cnf에 sql_mode의 값이 STRICT_TRANS_TABLES일 경우 필드에 선언된 대로의 값이 주어지지 않으면 위와같은 에러를 발생시키고 쿼리문을 중단한다.
현재의 sql_mode가 어떤 내용인지를 확인할려면 my.cnf를 열어서 확인할수도 있고 아래와 같이 MySQL에 접속한 상태에서 

# mysql -umysql아이디 -p로 mysql에 접속한 상태에서 select @@global.sql_mode 명령어로 현재의 sql-mode를 확인할수 있다.

mysql> select @@global.sql_mode;
+----------------------------------+
| @@global.sql_mode              |
+----------------------------------+
| NO_ENGINE_SUBSTITUTION    |
+----------------------------------+

sql_mode가 STRICT일 경우는 insert 작업을 까다롭게 관리해서 데이터의 무결성을 위해서는 좋으나 사실은 번거로운 상황이다.
STRICT모드를 변경할려면 my.cnf의 sql_mode의 내용을 변경해 주면 된다.
CentOS의 경우 

# vi /etc/my.cnf 파일을 열어서

# Recommended in standard MySQL setup
sql_mode=NO_ENGINE_SUBSTITUTION, STRICT_TRANS_TABLES

sql_mode에서 STRICT_TRANS_TABLES를 제거하거나 아니면 sql_mode 자체를 주석처리해서 사용하지 않도록 하면된다.

저장 후 mysql 데몬을 재 시작해 준다.

# service mysqld restart

댓글 없음:

댓글 쓰기