Post View

자바에서 Data too long for column 오류 발생 시 해결법

여느 때처럼 블로그 포스팅을 위해 글을 올리고 있었습니다.
글을 다 적고 작성버튼을 누르는 순간... 오류가 발생했습니다...

### Error updating database. Cause: java.sql.SQLSyntaxErrorException: (conn=123) Data too long for column 'postContent' at row 1
### The error may exist in file [/usr/local/tomcat/webapps/ROOT/WEB-INF-classes/mybatis/mapper/post-mapper.xml]
### The error may involve defaultParameterMap ### The error occurred while setting parameters
### SQL: UPDATE krePost SET categoryId = ?, postSubject = ?, postContent = ?, postView = ?, postPublish = ?, postWriteIp = ? WHERE postNo = ?
### Cause: java.sqlSQLSyntaxErrorException: (conn=123) Data too long for column 'postContent' at row 1
; bad SQL grammar []; nested exception is java.sql.SQLSyntaxErrorException: (conn=123) Data too long for column 'postContent' at row 1

순간 데이터가 날아간지 알고 식겁 했다가... 정신을 차리고 아직 post 방식으로 보내고 있는 상태라 복구가 가능할 것 같다는 생각이 들었습니다.
조심스럽게 세션이 날아가지 않도록 새 창을 열고 새로고침을 통해 세션을 갱신해준 뒤 발생한 오류의 내용을 확인해봤습니다.

"Data too long for column 'postContent' at row 1" 오류를 보니 데이터가 너무 길다는 것 같네요.
해당 글을 적었을 당시 글 내용에 html 태그가 많이 입력되어있어서 postContent 컬럼에 저장할 수 있는 최대 길이를 넘어선 것 같습니다.
그럼 postContent 컬럼의 최대 길이는 얼마일까요?

현재 MariaDB를 사용중이니 MariaDB에서 제공하는 데이터 타입(https://mariadb.com/kb/en/data-types/)을 확인해보았습니다.

기존 postContent는 TEXT 타입이었으니 총 65,535자의 문자를 입력할 수 있었네요.
그런데 해당 글에서 입력했던 글은 HTML 코드들로 인해 10만자를 넘었던 상황이었습니다.
그래서 TEXT 타입보다 더 큰 저장공간을 가진 MEDIUMTEXT로 변경을 해주었습니다.

alter table krePost modify postContent mediumtext;

alter 코드를 통해서 postContent의 타입만 mediumtext로 바꿔주었습니다.
그 다음 아까 오류가 났던 페이지에서 새로고침(F5)를 눌러서 데이터를 재전송했더니...

글이 정상적으로 올라갔네요!
힘들게 쓴 포스팅이 안날아가서 정말 다행이였습니다 ㅠㅠ
관리자 화면이라서 자바스크립트로 글자 수 제한을 걸어두지 않아서 정말 식겁했습니다.

아직 작업은 못했지만 글쓰기 화면에서 글자 수 제한 기능과 Error Page에 SQL 오류가 나타나는 것도 보안 측면에 좋지 않으니 제거 하도록 해야겠네요.
이렇게 Data too long for column 오류를 해결해보았습니다.

혹시 이런 상황이 발생하셨다면 자료가 유실되지 않게 조심히 진행하시길 바랍니다!

Comments