programing

MariaDB 10.2, jdbc ComplianceTruncation=false가 작동하지 않음

copyandpastes 2023. 7. 25. 23:19
반응형

MariaDB 10.2, jdbc ComplianceTruncation=false가 작동하지 않음

MariaDB 10.0에서 10.2로 마이그레이션하여 데이터와 관련된 문제에 직면하게 되었습니다.

우리는 사용했습니다.jdbcCompliantTruncation=falseMariaDB 10.0의 DB 연결 문자열에서, 그리고 그것은 컬럼에 대한 긴 값을 자르는 데 도움이 되었고, 아래 언급된 예외는 관찰되지 않았습니다.

MariadDb 10.2에서 예외가 발생했습니다.

           org.springframework.dao.DataIntegrityViolationException: PreparedStatementCallback; 
           SQL [insert into table(column1,column2) values(?,?,?)(conn=21823) Data too long for column 'column2' at row 1; nested exception is java.sql.BatchUpdateException: (conn=21823) Data too long for column 'column2' at row 1
           at org.springframework.jdbc.support.SQLStateSQLExceptionTranslator.doTranslate(SQLStateSQLExceptionTranslator.java:104)
           at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:72)
           at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:81)
           at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:81)
           at org.springframework.jdbc.core.JdbcTemplate.translateException(JdbcTemplate.java:1402)
           at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:620)
           at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:634)
           at org.springframework.jdbc.core.JdbcTemplate.batchUpdate(JdbcTemplate.java:924)

MariaDB 10.2에서 변경된 내용이 있거나 누락된 내용이 있습니다.이 방향의 모든 포인터는 매우 유용합니다.

마지막으로 MariaDB 10.2에 대한 SQL MODE를 변경하여 문제가 해결되었습니다.

SQL MODE의 기본값은 다음 명령으로 확인할 수 있습니다.

SELECT @@SQL_MODE;

다음을 반환합니다.

STRICT_TRANS_TABLES, ERROR_FOR_DIVISION_BY_ZERO , NO_AUTO_CREATE_USER, NO_ENGINE_SUBSTITUTION

이제 문제는 서버 sql-mode에 STRICT_TRANS_TABLES가 포함되어 있으면 jdbc ComplianceTruncation이 적용되지 않는다는 것입니다.

솔루션은 SQL_MODE를 업데이트하는 것입니다.

  SET SQL_MODE='ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';

언급URL : https://stackoverflow.com/questions/59112495/mariadb-10-2-jdbccomplianttruncation-false-not-working

반응형