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
'MySQL' 카테고리의 다른 글
MySQL에 root 계정 비밀번호 설정하기(변경하기) (0) | 2018.05.09 |
---|---|
MySQL의 외부 IP 접속 허용하기 (0) | 2018.05.01 |
MySQL 한글 insert시 발생하는 ERROR 1366 (HY000): Incorrect string value: 문제 (3) | 2017.06.01 |
MySQL table의 필드 값이 한글일 경우 Java 소스에서 SELECT 실패할 경우 (0) | 2017.06.01 |
MySQL table로부터 DDL 추출하기 (0) | 2017.06.01 |