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




+ Recent posts