JSP단에서 입력 후 DB에 인서트 되는 과정에서
JSP에서 일반적으로 한글은 2byte 그외는 1byte로 판단한다고 하네요
하지만 DB에 인서트 될떄에는 일반적으로 오라클 기준으로는
한글 3byte 엔터(개행) 시 2byte 그외 1byte로 들어가는 것 같습니다.
개인적으로 엔터(개행) 시 2byte때문에 애먹었습니당 ..ㅠ
혹시 저와 같은 분이 있을까해서 정리해서 글 남깁니다~!
//글자수 체크
function textByteChk(message, msgLimit, msgTarget){
var limitByte = Number(msgLimit);
var totalByte = 0;
var messageVal = $("#"+ message).val();
for(var i =0; i < messageVal.length; i++) {
var ch = escape(messageVal.charAt(i));
if(ch.length == 1) totalByte++; // 영문 (db : 1byte)
else if(escape(messageVal.charAt(i))=='%0A') totalByte += 2; // 엔터2바이트(개행 먼저 체크) (db : 2byte)
else if(ch.indexOf("%u") != -1) totalByte += 3; // 한글 3바이트 ( db : 3byte )
else if(ch.indexOf("%") != -1) totalByte += ch.length/3; // 개행, 공백 ( db : 1byte)
}
$('.'+ msgTarget).text(totalByte);
// 입력된 바이트 수가 limitByet를 초과 할 경우 경고창
if(totalByte > limitByte) {
alert(limitByte+" 바이트까지 입력 가능합니다.");
var bytes = 0;
for(var j=0; j < messageVal.length; j++) {
var ch = escape(messageVal.charAt(j));
if(ch.length == 1) bytes++; // 영문
else if(escape(messageVal.charAt(j))=='%0A') bytes += 2; // 엔터 2바이트(개행 먼저 체크)
else if(ch.indexOf("%u") != -1) bytes += 3; // 한글 3바이트
else if(ch.indexOf("%") != -1) bytes += ch.length/3; // 개행, 공백
if(bytes > limitByte){
$("#"+ message).val(messageVal.substring(0,j));
break;
//$('.'+ msgTarget).text(bytes);
}
$('.'+ msgTarget).text(bytes);
}
}
}
//글자수 체크
function textByteChk(message, msgLimit, msgTarget){
// message : html 아이디값 msgLimit : 바이트 제한 수 msgTarget : 변화하는 바이트 수
var limitByte = Number(msgLimit); // 바이트 제한
var totalByte = 0; // 전체 바이트 수
var messageVal = $("#"+ message).val(); // id값이 message인 태그의 값 가져옴
for(var i =0; i < messageVal.length; i++) { // for문을 통해 입력된 값만큼의 길이만큼 돌게 됨
var ch = escape(messageVal.charAt(i)); // 한글자씩 판단 , escape 인코딩함수 찾아보세용
if(ch.length == 1) totalByte++; // 영문 (db : 1byte)
else if(escape(messageVal.charAt(i))=='%0A') totalByte += 2; // 엔터2바이트(개행 먼저 체크) (db : 2byte) << 핵심!!
else if(ch.indexOf("%u") != -1) totalByte += 3; // 한글 3바이트 ( db : 3byte )
else if(ch.indexOf("%") != -1) totalByte += ch.length/3; // 개행, 공백 ( db : 1byte)
}
$('.'+ msgTarget).text(totalByte);
// 입력된 바이트 수가 limitByet를 초과 할 경우 경고창
if(totalByte > limitByte) { // 제한된 바이트 수를 넘어가는 경우
alert(limitByte+" 바이트까지 입력 가능합니다.");
var bytes = 0;
for(var j=0; j < messageVal.length; j++) {
var ch = escape(messageVal.charAt(j));
if(ch.length == 1) bytes++; // 영문
else if(escape(messageVal.charAt(j))=='%0A') bytes += 2; // 엔터 2바이트(개행 먼저 체크)
else if(ch.indexOf("%u") != -1) bytes += 3; // 한글 3바이트
else if(ch.indexOf("%") != -1) bytes += ch.length/3; // 개행, 공백
if(bytes > limitByte){
$("#"+ message).val(messageVal.substring(0,j));
break;
//$('.'+ msgTarget).text(bytes);
}
$('.'+ msgTarget).text(bytes);
}
}
}