나는 파일로부터 날짜를 얻었으므로 이것을 DB Oracle에 삽입하고있다.인서트 값 인 코드 오라클
열 VARCHAR2 형태, 크기, 나는 예외를 'абв'을 삽입하는 시도하고보고 한
3 바이트 : ORA-12899 : 너무 큰 값
문제는 예입니다 열 (실제 : 6, 최대 : 3)
각 문자는 2 바이트로 인코딩되기 때문입니다. 이제 우리는 다시 인코딩 할 것입니다. 데이터베이스는 AL32UTF8로 인코딩됩니다. 파일의 인코딩은 CP866입니다.
시도
은 실패 코딩하기 :Encoding srcEncodingFormat = Encoding.GetEncoding(866);
Encoding dstEncodingFormat = Encoding.UTF8;
byte[] originalByteString = srcEncodingFormat.GetBytes(s);
byte[] convertedByteString = Encoding.Convert(srcEncodingFormat,
dstEncodingFormat, originalByteString);
s = dstEncodingFormat.GetString(convertedByteString);
우리는 열 유형을 변경할 수 없습니다. VARCHAR2(3 CHAR)
도 사용할 수 없습니다. 어떻게 해결할 수 있습니까? 데이터가 데이터베이스에 삽입 될 때 추가 할 값의 인코딩을 명시 적으로 지정할 수 있습니까?
NLS_LANGUAGE AMERICAN
NLS_TERRITORY AMERICA
NLS_CURRENCY $
NLS_ISO_CURRENCY AMERICA
NLS_NUMERIC_CHARACTERS .,
NLS_CHARACTERSET AL32UTF8
NLS_CALENDAR GREGORIAN
NLS_DATE_FORMAT DD-MON-RR
NLS_DATE_LANGUAGE AMERICAN
NLS_SORT BINARY
NLS_TIME_FORMAT HH.MI.SSXFF AM
NLS_TIMESTAMP_FORMAT DD-MON-RR HH.MI.SSXFF AM
NLS_TIME_TZ_FORMAT HH.MI.SSXFF AM TZR
NLS_TIMESTAMP_TZ_FORMAT DD-MON-RR HH.MI.SSXFF AM TZR
NLS_DUAL_CURRENCY $
NLS_COMP BINARY
NLS_LENGTH_SEMANTICS BYTE
NLS_NCHAR_CONV_EXCP FALSE
NLS_NCHAR_CHARACTERSET AL16UTF16
NLS_RDBMS_VERSION 11.2.0.2.0
이 내 NLS 매개 변수입니다. 사실 상사는 데이터베이스 수준에서 변경 될 내용을 엄격히 금지합니다. 실례합니다.이게 없으면 어떤 방법이 있겠습니까?
.NET의 경우 응용 프로그램에서 사용하는 드라이버/공급자에 따라 다릅니다. 일부는 'NLS_LANG'(예 : ODP.NET 무인 드라이버)에서 설정을 상속 받고, 다른 일부는 현재 Windows 로케일 (예 : ODP.NET Managed Driver)에 의존하고 다른 설정은 항상 UTF-16을 사용합니다 (예 : Oracle의 OraOLEDB). –
증언에서 그러한 해킹은 권장되지 않습니다. 또한 어쨌든 귀하의 경우에는 작동하지 않을 것입니다. 예를 들어, 'абв'을 CP866으로 바이트 단위로 전송하면 오라클이 자리 표시 자 (예 :'¿')로 즉시 바꿀 잘못된 UTF-8 문자 (유효하지 않은 바이트 값)가됩니다. 언급 된 해킹은 데이터베이스 문자 세트가 ** 모든 ** 바이트 값 (예 : 모든 ISO8859-x 인코딩 또는 Windows CPxxxx)을 처리하는 경우에만 작동합니다. –