"컬럼에 대한 데이터가 너무 깁니다." - 왜요?
MySQL 스크립트를 작성하여 가상의 병원 기록을 위한 데이터베이스를 만들고 데이터를 채웁니다.테이블 중 하나인 Department에는 Description이라는 이름의 열이 있으며 이 열은 type varchar(200)로 선언됩니다.Description(설명)에 대한 INSERT 명령을 실행하면 다음 오류가 나타납니다.
오류 1406: 1행의 '설명' 열에 대한 데이터가 너무 깁니다.
삽입하는 문자열은 모두 150자 미만입니다.
츠키다
CREATE TABLE Department(
...
Description varchar(200)
...);
삽입 명령어는 다음과 같습니다.
INSERT INTO Department VALUES
(..., 'There is some text here',...), (..., 'There is some more text over here',...);
어느 모로 보나, 이것은 효과가 있을 것이다.누구 통찰력 있는 사람?
을 '하다'로 합니다.LONGTEXT
이전 데이터베이스를 새 버전으로 마이그레이션할 때도 비슷한 문제가 있었습니다.
MySQL 모드를 STRICT를 사용하지 않도록 전환합니다.
SET @@global.sql_mode= 'NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';
에러 코드: 1406.데이터가 열에 비해 너무 깁니다(MySQL).
mysql 테이블의 한 행에 저장할 수 있는 데이터 양에는 열 수 또는 개별 열 길이에 관계없이 제한이 있습니다.
공식 문서에 기재된 바와 같이
모든 열의 총 길이가 이 크기를 초과할 수 없기 때문에 최대 행 크기는 열의 수(및 가능한 경우)를 제한합니다.예를 들어 utf8 문자는 문자당 최대 3바이트가 필요하므로 CHAR(25) CARTER SET utf8 열의 경우 서버는 값당 255 × 3 = 765바이트를 할당해야 합니다.따라서 표 하나에 65,535 / 765 = 85개 이상의 열을 포함할 수 없습니다.
가변 길이 열의 저장소에는 행 크기에 대해 평가되는 길이 바이트가 포함됩니다.예를 들어 VARCHAR(25) CHARTER SET utf8 열은 값의 길이를 저장하는 데 2바이트가 소요되므로 각 값은 최대 767바이트가 소요됩니다.
INNODB 테이블의 제한 사항을 확인할 수 있습니다.
mysql을 합니다.VARCHAR
다음 "이렇게 "로 변경해 주세요.TEXT
로, bcoz를 취득할 수 는, 「65,535」를 취득할 수 있습니다.TEXT
을 와와로 LONGTEXT
의 것이 65,535
.
of의 총 LONGTEXT
4,294,967,295
표시
Varchar에는 한계가 있습니다.데이터 타입을 텍스트로 변경해 보세요!
알고 보니, 흔히 있는 일이지만, 그건 내 멍청한 실수였어.이 테스트 방법에서는 데이터 유형을 varchar(50)에서 varchar(200)로 변경한 후 부서 테이블을 재구축하지 않았습니다.열은 varchar(50)로 유지한 채 insert 명령을 다시 실행했을 뿐입니다.
휴지 상태에서는, 독자적인 유저 타입을 작성할 수 있습니다.그래서 나는 이 문제를 위해 그렇게 했다.다음과 같이 간단한 것입니다.
public class BytesType implements org.hibernate.usertype.UserType {
private final int[] SQL_TYPES = new int[] { java.sql.Types.VARBINARY };
//...
}
물론 사용자 타입의 확장에 의해서 실장할 수 있는 것도 있습니다만, 다른 방법을 찾고 있는 유저에게 이 점을 알리고 싶다고 생각하고 있습니다.
하지 않으려면 에서한 크기로 .LEFT(field_name,size)
.
INSERT INTO Department VALUES
(..., LEFT('There is some text here',30),...), (..., LEFT('There is some more text over here',30),...);
목표 필드의 크기 예시로 "30"을 사용했습니다.
내 코드 중 일부에서는 대상 필드의 크기를 쉽게 파악하여 이 작업을 수행할 수 있습니다.하지만 당신의 코드가 그렇게 어렵다면, 다른 해답 중 하나를 택하세요.
매우 오래된 질문이지만, 위에서 제시한 모든 것을 시도해 보았지만 여전히 해결되지 않았습니다.
유사한 구조의 이력테이블에 레코드를 삽입하여 변경을 추적하는 메인테이블 삽입/갱신 트리거가 있었습니다.메인 테이블 열의 크기를 늘렸는데 이력 테이블 열의 크기를 변경하는 것을 잊어버려서 문제가 발생하였습니다.
다른 테이블에서도 비슷한 변경을 했더니 오류가 사라졌습니다.
200자로 필드를 가진 테이블을 만들고 160자 초반의 행을 두 개 추가했는데 괜찮습니다.행이 200자 미만입니까?
SqlFiddle 표시
저는 열 유형을 BIT로 정의했습니다(예: "boolean")
UI(Workbench)를 통해 열 값 "1"을 설정하려고 했을 때 "Data too long for column" 오류가 발생했습니다.
BIT 값 설정에는 다음과 같은 특별한 구문이 있음을 알 수 있습니다.
b'1'
해시된 비밀번호를 테이블에 저장할 때도 같은 문제가 발생하였습니다.최대 열 길이를 변경하는 것은 도움이 되지 않았습니다.모든 것이 간단했다.이전에 작성한 테이블을 데이터베이스에서 삭제한 후 허용되는 길이의 새 값으로 코드를 테스트해야 했습니다.
「 」를 사용하고 있는 는,type: DataTypes.STRING
, 이 만큼 길면 DataTypes.STRING(1000)
내 경우 데이터를 잘못 입력했기 때문에 이 오류가 발생했습니다. 예를 들어, 긴 유형의 컬럼인 경우 문자열 유형을 입력하려고 했습니다.입력하신 데이터가 동일하거나 동일하지 않은지 확인하시기 바랍니다.
언급URL : https://stackoverflow.com/questions/18897420/data-too-long-for-column-why
'programing' 카테고리의 다른 글
Vuex - 변환 핸들러를 무시하고 항상 저장 데이터를 직접 변환하는 것이 좋은 생각입니까? (0) | 2022.10.04 |
---|---|
MySQL 데이터베이스를 제거하려면 어떻게 해야 합니까? (0) | 2022.10.04 |
데이터베이스 행 태플의 정수에 'L' 접미사가 붙는 이유는 무엇입니까? (0) | 2022.10.04 |
네스트된 Vuej 슬롯: 슬롯을 손자녀에게 전달하는 방법 (0) | 2022.10.04 |
Larabel 3/4에서 쿼리 실행 (0) | 2022.10.04 |