2009-08-21 1 views
2

문제는 반환 된 객체의 모든 문자열에 특수 문자가 붙는 것입니다. 예 :데이터베이스에서 반환 할 때 문자열에 특수 문자가 추가됩니다. Oracle 8i 데이터베이스를 쿼리하기 위해 NHibernate를 사용하고 있습니다.

CUSTOMER,ONE������� 

NHibernate에 필드 타입 AnsiString을하고 오라클 데이터 유형 CHAR (20)이며, 문자 집합 CHAR_CS이다. :(

+0

문자 집합 문제를 해결하려면 서버 설정 ("SELECT * FROM nls_database_parameters WHERE 매개 변수 IN ('NLS_CHARACTERSET', 'NLS_NCHAR_CHARACTERSET')) 및 클라이언트 설정 (버전, 레지스트리 키 HKEY_LOCAL_MACHINE \ SOFTWARE \ ORACLE \ HOMEID \ NLS_LANG) ... – Mac

답변

4

CHAR (20)에가는 필드가 긴 정확히 20 자 필요에 따라 채워집니다 의미 뭐죠 그래서 내가 단서가없는 오라클과 완전히 새로운입니다. 패딩 문자가 비어 있습니다.

패딩 문자가 물음표로 표시하는 경우

문자 집합 설정 어딘가에 문제가 있어야합니다. 당신은 당신의 문제 here에 대한 통찰력을 찾을 수 있습니다.

당신이 여기에서 필요로하는 것은 더 나은 아직 이동 반환 된 문자열을 트림, 또는 ~ VARCHAR2 (20).

+0

네, 맞습니다. 뭔가가 3 자리의 통화 코드처럼 고정 된 길이라는 것을 알지 못한다면 나는 일반적으로 VARCHAR을 고집합니다. – pjp

+0

유일한 해결책입니까? 특별히 데이터 바인딩을 사용하기 전에 모든 문자열을 다듬는 것은 상당히 고통 스러울 것입니다. –

+0

아니요. 자신 만의 질의를하고 모든 CHAR 필드에 TRIM을 추가 할 수 없다면 말입니다. VARCHAR2는 실제로 CHAR가 아닌 원하는 유형입니다. – Mac

0

I cann 이 문제에 대한 적절한 해결책을 찾지 못했지만 nhibernate 드라이버를 'OracleClientDriver'에서 'OleDbDriver'로 변경하면이 문제가 해결됩니다. 아직도이 문제를 올바르게 해결하는 방법을 아는 사람이라면 호환성 문제로 인해 Oracle에 액세스하기 위해 OldDbDriver를 사용하는 것을 좋아하지 않으므로 알려 주시기 바랍니다.

+0

글쎄, 당신은 여전히 ​​당신의 문자열을 패딩하고 있지만, 유효하지 않은 문자 대신에 진짜 공백을 넣을 것이라고 확신합니다. – Mac

관련 문제