Comment 8
-
msakstp
2015.11.10 17:05
-
Terry
2015.11.10 17:10
저도 아는건 아니지만 테스트해보고 유추한 내용 적습니다.
select SUBSTRING('나12',4,5) --결과값 NULL
select SUBSTRING('나12',5,5) --결과값 공백한글의 경우 2Byte 를 사용하며
SubString 처리시, 내부적으로 한글인 경우 2 Byte 를 1Byte 로 인식하게끔
처리되는 듯 합니다.
2Byte 문자 처리시 내부 로직의 차이로 인해 저런 현상이
발생하는 걸로 예상이 됩니다만.....
말 그대로 억지로 끼워맞추기식이라 -_-;;;
자세한 내용은 다른 고수분들께 바턴을 넘기겠습니다...
(이 댓글은 안 맞을 확율이 99.9% 에 수렴함..)
참고 안하시는게 좋을듯요 ㅠ.ㅠ
-
msakstp
2015.11.10 17:42
저도 뭐라도 답변을 해줘야하나 답답하네요 ㅎㅎ
테리님 관심 가져주셔서 감사합니다 ^^
-
건우아빠
2015.11.10 18:16
unicode로 처리하면 한글도 정상적으로 나오는데.....
-
Terry
2015.11.10 18:28
헛..정말이네요..
select SUBSTRING(N'가나12',5,5) --결과값 공백
select SUBSTRING(N'나12',4,5) --결과값 공백
select SUBSTRING(N'ab38',5,5) --결과값 공백
select SUBSTRING(N'1321',5,5) --결과값 공백정상적으로 나오네요^^
-
건우아빠
2015.11.11 09:56
한글뿐만 아니라
일본어, 한자, 그리스어 등 다른 글자들도 마찮가지네요...
-
msakstp
2015.11.10 18:28
대응방법보다는 현상의 원인을 궁금해 하셔서요ㅎㅎ
건우아빠님도 관심 가져주셔서 감사합니다 ^^
-
dontcryme
2015.11.11 17:10
https://msdn.microsoft.com/ko-kr/library/ms187748(v=sql.90).aspx
상기 페이지에 보시면 하단에
"반환되는 값은 호환성 수준에 따라 달라질 수 있습니다. 호환성 수준에 대한 자세한 내용은 sp_dbcmptlevel(Transact-SQL)을 참조하십시오"
라고 되어있는데 현재 제 SQLServer 2012기준으로는 NULL 값이 나오지 않습니다.
https://msdn.microsoft.com/ko-kr/library/ms178653(v=sql.90).aspx
위 상세 내역 중 Substring관련된 내역을 TEST하기 위해서 제 SQLServer 2012의 호환성을 100(SQLServer 2008)으로
바꾸면
Substring('가',2,1) 값이 NULL을 Return 합니다.
호환성 수준에 따른 처리 컨셉에 따른 결과가 아닌가 싶습니다.
substring함수 들어갈때
select SUBSTRING('ab38',5,5) 일경우 문자열의 datalength 가 4이고 문자열의 시작점이 5여서 예외처리 되었는데
select SUBSTRING('가나12',5,5) 일경우 문자열의 datalength 가 6인데 내부 로직안에 들어가서 보니 4글자여서 예외처리 되지 않았다고 생각하는데 맞을까요...?