com. mysql. jdbc.Mysql Data Truncation:데이터 잘라내기:데이터가 너무 길어서 ' column_name' 열에 사용할 수 없습니다.
MySQL과 함께 Java JDBC를 사용하고 있는데 다음 오류가 발생합니다.
com.mysql.jdbc.MysqlDataTruncation: Data truncation:
Data too long for column 'column_name'
이 오류를 해결하려면 어떻게 해야 합니까?
데이터베이스에 이미지 파일을 바이트로 삽입하려고 할 때 Spring Boot Data JPA 응용 프로그램에서 동일한 문제가 발생했습니다. 동일한 오류가 발생했습니다.
많은 연구개발 끝에 아래와 같은 해결책을 찾았습니다.
다음 행을 추가했습니다.application.properties
파일을 통해 문제가 해결되었습니다.
spring.datasource.url=jdbc:mysql://localhost:3306/conweb?sessionVariables=sql_mode='NO_ENGINE_SUBSTITUTION'&jdbcCompliantTruncation=false
누군가에게 도움이 되길 바랍니다.
MySQL 터미널에서 이 오류를 재현하는 방법
mysql> create table penguins(val CHAR(2));
Query OK, 0 rows affected (0.08 sec)
mysql> insert into penguins values("AB");
Query OK, 1 row affected (0.00 sec)
mysql> insert into penguins values("ABC");
Query OK, 1 row affected, 1 warning (0.01 sec)
mysql> show warnings;
+---------+------+------------------------------------------+
| Level | Code | Message |
+---------+------+------------------------------------------+
| Warning | 1265 | Data truncated for column 'val' at row 1 |
+---------+------+------------------------------------------+
1 row in set (0.00 sec)
이 오류는 발생하는 오류이지만 MySQL 터미널에서는 경고로 표시되고 행을 삽입하지만 자동으로 잘라냅니다.
MySQL JDBC는 용서하지 않으며, 하드 에러를 뱉고 행을 삽입하지 않습니다.
2가지 해결책
삽입할 데이터 유형의 용량을 늘리거나, 삽입할 내용의 크기를 줄입니다.
열의 크기를 늘리는 범례:
If you are using then use this
----------------- --------------
smallint int
int long
TEXT LONGTEXT
LONGTEXT CLOB
CLOB Store the content to disk, and save the filename in the db.
이것은 꽤 분명해 보일 수도 있고, 그럴 수도 있습니다.해당 열에 들어갈 값보다 큰 ' column_name' 열의 값을 가진 행을 삽입하거나 업데이트하려고 한 것 같습니다.
예를 들어 CHAR 또는 VARCHAR인 경우 정의된 열의 크기보다 긴 문자열이 있을 수 있습니다.
저장하는 데이터가 열보다 크지 않은지 확인하거나(아마도 저장하기 전에 긴 문자열을 잘라냄) 데이터베이스 열 크기를 늘려야 합니다.
Image/Word/PDF 파일을 업로드하다가 Spring Boot 애플리케이션에서 동일한 문제가 발생하여 다음 단계로 수정했습니다.
해결책
- 업로드하려는 파일의 크기를 확인해 주시기 바랍니다.
- 그런 다음 해당 파일 크기를 매핑된 데이터베이스 필드 유형에서 허용하는 최대 크기와 비교합니다.
- 예를 들어 LOB의 경우:
64KB, MEDIABLOB≈ 16MB 및 LONGBLOB≈ 4GB 실행 TINYBLOB≈ 25트, BLOB≈ 64KB, MEDIABLOB≈ 16MB및 LONGBLOB≈ 4GB≈ 공간 요구 사항에 따라 Altertable 명령을 사용합니다.
ALTER TABLE '탭LE_NAME' 수정 'FILD_'NAME' MEDIABLOB;
참고: 링크는 항상 저장하는 것이 좋으나 실제 파일(크기가 큰 파일)은 DB에 저장하지 않는 것이 좋습니다.
제 경우 업로드한 데이터에 따옴표(', ')가 포함되어 있습니다.그렇기 때문에 위에 말씀하신 것과 같은 예외가 발생합니다.데이터 내부의 따옴표를 제거한 후 테이블에 성공적으로 삽입했습니다.
이 오류는 열에 삽입하려는 데이터 크기가 너무 크기 때문에 나타납니다.
솔루션 - 열 크기를 최대로 변경합니다.열이 VARCHAR 형식이라고 가정하면 mySQL에서
ALTER TABLE table_name CHANGE COLUMN col_name col_name VARCHAR(1000); //assuming 1000 is enough
여기서 우연히 발견하는 사람들에게는 비슷한 오류가 발생하는 또 다른 이유가 있을 수 있습니다.
저장 프로시저 매개 변수의 유형이 제한 요인일 수 있습니다.
예: LONGTEXT 데이터를 전송하는 저장 프로시저의 파라미터가 TEXT 형식일 수 있지만, 해당 컬럼 데이터 유형과 데이터가 LONGTEXT로 MySQL 서버에 전송됩니다.이 경우 파라미터 데이터 유형을 업데이트해야 합니다.
Spring Boot and Hibernate를 사용하는 것이 좋습니다.저는 같은 문제에 직면했고 해결책은 꽤 분명했습니다.
@Column(length = 65555)
@NotNull
private String content;
저도 다음과 같은 선을 시도해 보았지만, 이는 어찌된 일인지 아무런 효과를 나타내지 못했습니다.
@Size(min = 5, max = 65555)
MySQL 테이블 크기에 대한 기본적인 제약 조건이 있기 때문에 이 문제가 발생할 수 있다고 생각합니다.@Size
주석은 입력된 값이 정의된 범위에 있지 않을 경우 사용자에게 피드백하기 위해 사용됩니다.이것이 당신의 문제를 해결하길 바랍니다!
JPA 도면요소에서 주석 @Column을 길이와 함께 사용합니다.그러면 문제가 해결될 겁니다.
샘플 코드:
@Entity
public class SampleEntity{
@Column(length = 1200)
private String column_name;
// ...
}
원하는 대로 길이를 설정하면 테이블에서 VARCHAR(length)가 됩니다.값을 크게 주면 긴 텍스트로 생성됩니다.
시도 및 테스트 - create sql 스크립트는 다음과 같이 표시됩니다.
CREATE TABLE `SampleEntity` (
`id` bigint(20) NOT NULL,
`dateCreated` datetime DEFAULT NULL,
`dateModified` datetime DEFAULT NULL,
`column_name` longtext,
`userName` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
참조 - https://www.baeldung.com/jpa-size-length-column-differences
똑같은 문제가 있었습니다.이것으로 문제가 해결되었습니다.
@Column(columnDefinition = "longtext")
private String document;
우리의 경우, 애플리케이션을 재부팅하는 것만으로 문제가 해결됩니다. 즉, Tomcat을 다시 시작하는 것을 의미합니다.다른 이유로 이 문제가 발생할 수 있지만 오류는 이렇게 던져집니다.
언급URL : https://stackoverflow.com/questions/13567155/com-mysql-jdbc-mysqldatatruncation-data-truncation-data-too-long-for-column-c
'programing' 카테고리의 다른 글
아이들이 가로축을 채우도록 신장시키는 방법은? (0) | 2023.10.29 |
---|---|
워드프레스 메뉴-워커에서 ACF 객체 (0) | 2023.10.29 |
다른 데이터베이스 및 테이블에 일회성 쿼리 만들기 (0) | 2023.10.29 |
무엇이 단편적이고 왜 중요합니까? (0) | 2023.10.29 |
py.test: 오류: 인식할 수 없는 인수: --cov=ner_brands --cov-report=term-missing --cov-config (0) | 2023.10.29 |