2013-08-27 2 views
21

두 개의 MySQL 인스턴스가 있습니다. 첫 번째 것은 데이터가 너무 길 때 삽입시 문자열을 자릅니다. 제 2 회 한 오류가 발생합니다 : MySQL이 너무 긴 varchar truncation/error 설정

ERROR 1406 (22001): Data too long for column 'xxx' at row 1

내가 2 일뿐만 아니라 데이터를 잘라야합니다. 이 동작을 관리하기위한 MySQL 설정이 있습니까? 엄격한 SQL 모드가 활성화되지 않고 당신이 CHAR 또는 열의 최대 길이를 초과 VARCHAR 컬럼에 값을 할당하면

+1

파일 유형 및 컬럼의 길이는 무엇입니까? 두 서버에서 동일한 파일에 대해 동일한 값을 갖고 있습니까 –

+0

@ metalfight-user868766 파일 형식에 대한 질문을 이해할 수 없습니다. 엔진은 InnoDB, 열 유형 - varchar입니다. 열의 길이가 측정되지 않습니다. 그리고 네, 데이터베이스는 거의 동일합니다. –

+0

어떤 종류의 오류가 있습니까? – 7alhashmi

답변

28

당신은 STRICT_TRANS_TABLESSTRICT_ALL_TABLES을 해제 할 수 있습니다. 이렇게하면 삽입 된 문자열을 자동으로자를 수 있습니다. MySQL의 Documantation에서

견적.

Strict mode controls how MySQL handles invalid or missing values in data-change statements such as INSERT or UPDATE. A value can be invalid for several reasons. For example, it might have the wrong data type for the column, or it might be out of range. A value is missing when a new row to be inserted does not contain a value for a non-NULL column that has no explicit DEFAULT clause in its definition. (For a NULL column, NULL is inserted if the value is missing.)

참조 : MySQL Server SQL Modes

+0

이것은 내 문제에 대한 답변입니다 –

+0

BTW - 아래의 메서드는 유효한 것으로 간주해서는 안됩니다 - 당신은 my.cnf에 SQL 모드를 설정해야합니다 -하지만 NO_AUTO_CREATE_USER 또는 다른 어떤 필요하지 않습니다, STRICT_TRANS_TABLES 또는 STRICT_ALL_TABLES 또는이 경고를 선전하는 다른 항목이 없는지 확인해야합니다. 사실 sql-mode = ''도 오류를 수정합니다. – Ross

9

는, 값이 맞게 잘립니다 경고가 생성됩니다. 공백이 아닌 문자의 자르기의 경우 경고가 아닌 오류가 발생하고 엄격한 SQL 모드를 사용하여 값 삽입을 억제 할 수 있습니다. 6.1.7 절. "서버 SQL 모드"부분을 참조하십시오.

당신은 그것을 바꿀 수있는 방법 :

  1. 아래 추가

    SQL 모드 = "NO_AUTO_CREATE_USER을 my.cnf의 수 : 엄격 모드를 해제하는 두 가지 방법을 http://dev.mysql.com/doc/refman/5.7/en/sql-mode.html


    발견 , NO_ENGINE_SUBSTITUTION "

  2. way는 mysql 콘솔을 사용합니다.

    SET @@ global.sql_mode = '';

프로덕션 환경에서 실행하기 전에 테스트를 수행하십시오.

+0

SET @@ global.sql_mode = ''; 매력으로 근무 –

1

당신의 cPanel를 사용하는 경우,

/usr/my.cnf

sql-mode="NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION" 

교체

sql-mode="" 

실행

/etc/init.d/mysql restart 
관련 문제