varchar2 타입에서 입력 가능한 최대 크기는 4KB이며 이는 영문은 4천자, 한글은 2천자라고 다들 계산합니다.
위 기준대로라면 한글은 2천자가 들어가야 하나, 사실은 그보다 훨씬 적게 들어가는 상황이 존재합니다.
PreparedStatement 인스턴스에서 setString() 으로 문자열을 지정할 경우에 그러한데,
내부적으로 문자를 UTF-8로 변환해서 길이가 4KB를 넘는지를 보게됩니다.
영문의 경우 2바이트로 계산해서 최대 2천자까지 들어가나, 한글의 경우 UTF-8에서 문자당 3바이트(?)를 차지하므로
입력 가능한 문자의 개수는 666자(1998 바이트)에 불과합니다.
하지만 Statement 로 할 경우에 이런 제약은 없으나, 쿼리가 외부에 노출되는 보안상의 문제때문에
PreparedStatement 를 사용하는게 좋겠죠.
해결책은 setString() 이 아니라 setCharacterStream을 사용하면 됩니다. 이렇게하면 한글 2천자를 넣을 수 있음.
참고 : http://www.javaservice.net/~java/bbs/read.cgi?m=devtip&b=jdbc&c=r_p&n=1152605190
추가로 위와같이 setCharacterStream을 사용시엔 리턴값이 Reader 임도 유의해야겟습니다.
'Programming > JAVA' 카테고리의 다른 글
java : 문자열을 int형으로 형변환할때 주의점(parseInt, valueOf) (0) | 2011.03.31 |
---|---|
instanceof 연산자 (0) | 2011.02.25 |
JAVA : boxing, unboxing (0) | 2010.10.20 |
java : for문 (배열 등과 같은 자료구조의 각 value를 쉽게 접근하는 방법) (0) | 2010.10.11 |
jakarta(자카르타) 한글화 홈페이지. (0) | 2010.03.14 |