2010-07-23 2 views
2

또는 간단하게, 나는 그것을 '삭감을 의미합니다 (Oracle 데이터베이스)왜 문자열이 값으로 사용되는 쿼리에서 ResultSet이 하나의 char을 덜 얻습니까?

SELECT TO_NUMBER (tkb.id_kucnog_broja) id, 'Buildings and home numbers' vrsta_pj, 

자바에서 나는이

for (int j = 0; j < rs.getMetaData().getColumnCount(); j++) { 
data = rs.getString(j + 1); 
} 

하고 얻는 결과는'건물과 집 전화 번호를 '이이 코드를 '마지막 숯 (문자열을 바꾸어도 똑같습니다). 나는 2 '의 문자로 문자열을 만들 수 있지만 왜 이런 일이 발생하는지 알고 싶습니다.

편집 :

문제를 정확하게 지적하고 관리합니다. 실제 문자열은 'Zgrade i kućni brojevi'입니다 (여기에서 번역했습니다). 'º'기호 (그리고 나는 'š'또는 'đ'와 같은 다른 모든 문자를 추측합니다)가 문제인 것 같습니다. 어떤 크기의 문자열 (너무 많이 실험하지 않았고, 많은 작업을했습니다.)을 작성하고 크로아티아어의 '특별한'기호를 넣지 않으면 모든 것이 괜찮습니다. 그러나 그 문자열을 넣으면 문자열이 짧아집니다. 한 숯으로. 특별히 흥미로운 점은 Toad에서 실행할 때 잘 작동한다는 것입니다.

EDIT2 : 크로아티아어 특수 문자가 2 곳을 차지하는 것 같습니다. '\ u107'을 입력하면 문제가 남아 있습니다. 해결 방법을 만들 수 있습니다 ('&#263;' 작성 또는이 문자열의 끝에 문자열 추가) 문제가 해결되었으므로 (작업 완료 방법을 알고있는 방식으로) 문제가 해결되었지만 여전히 올바르게 수행하는 방법이 궁금합니다.

+0

이상한 그것은 어떤 길이의 현을 위해 일어나는가? 문자열의 길이가 0 인 경우 (예 :''')? – skaffman

+0

'n'특수 문자를 입력하면 문자열이 'n'또는 1로 단축됩니까? – I82Much

+1

아마도 문자 인코딩 설정과 관련이 있습니다. 이러한 문자를 처리 할 수 ​​있도록 데이터베이스가 올바른 문자 인코딩 (예 : UTF-8)을 사용하는지 확인하십시오. – Jesper

답변

1

기본적으로 데이터베이스는 데이터 덤프가 아닙니다. 데이터베이스에서 문자열 (VARCHAR2/NVARCHAR2/CHAR/NCHAR/CLOB)을 삽입/업데이트/선택하면 클라이언트와 데이터베이스의 문자 집합을 고려하여 필요한 변환을 수행합니다.

일부 문자 세트는 단일 바이트이며 일부는 고정 길이 멀티 바이트 (예 : 모든 문자가 2 바이트)이고 일부는 가변 길이 멀티 바이트입니다 (예 : 일반 문자는 1 바이트, 특수 문자는 2와 4).

데이터베이스의 문자열 길이 (바이트 및 문자)와 Java 문자열의 길이 (다시 바이트/문자)를 고려해야합니다. 나는 당신이 자바 문자열의 길이를 문자로 끝내고 있다고 생각하지만 그 길이를 바이트로 취급한다.

가치있는 드라이버 확인.

관련 문제