2017-04-25 9 views
0

필자는 db2/iSeries에 익숙하지 않지만 여러 언어의 문자를 db2 테이블에 저장할 수 있도록 노력하고 있습니다. db2/iSeries 테이블의 컬럼을 CCSID 37에서 1208로 변경하면 명백한 문제점이 있습니까? CCSID를 전환하면 이미 C 럼에 저장된 데이터에 어떤 영향을 L 줍니 까?CCSID 스위치의 알려진 문제점이 있습니까?

답변

0

당신은 몇 가지 무서운 메시지가 표시됩니다

CREATE TABLE QTEMP/TEST (FLD1 CHAR (10) CCSID 37 NOT NULL WITH DEFAULT) 

ALTER TABLE QTEMP/TEST ALTER COLUMN FLD1 SET DATA TYPE CHARACTER ( 
10) CCSID 1208 NOT NULL WITH DEFAULT 

CPD32CC - Change to field FLD1 may result in data loss. 
--reason code 02: 02 - The new length is shorter than the current length. 
CPA32B2 - Change of file TEST may cause data to be lost. (C I) 
SQL0460 - Truncation of data may have occurred for ALTER TABLE of TEST in QTEMP. 

그러나 데이터를 가정하는 것은 알파, 당신은 아무것도 잃지 않을 것이다.

그러나 DBCS 인코딩이 필요한 10 자 문자열을 저장하려고하면 열 길이가 여전히 10 바이트이므로 실패하고 ... CCSID 1208에서 10 자 DBSC 문자열의 경우 22 바이트가 필요합니다.

유형을 UTF-16 (CCSID 1200)을 사용하는 NCHAR로 변경하면, 시스템은 자동으로 10을 문자 길이로 인식합니다 (길이가 28로 증가하지 않으면 자르기에 관한 메시지가 사라지지 않습니다). 그것을 저장하기 위해 20 바이트를 할당합니다. 말했다되고 그건

ALTER TABLE QTEMP/TEST ALTER COLUMN FLD1 SET DATA TYPE NCHAR(10) NOT NULL WITH DEFAULT 

이 파일을 가정하는 기존 응용 프로그램의 일부인 테이블을 변경하면 문제의 시작에 불과하다.

기존 RPG 프로그램은 다시 컴파일해야하며 수정 될 가능성이 큽니다.

유니 코드에서 EBCDIC로 변환하는 LF (보기) 레이어를 사용하여 이러한 요구 사항을 해결할 수 있습니다. 이는 현재의 데이터에 도움이됩니다. 그러나 실제로 유니 코드가 필요한 새로운 데이터에는 도움이되지 않습니다.

또한 Windows 용 IBM iAccess에 포함 된 이전 5250 에뮬레이터는 유니 코드를 지원하지 않습니다. 최신 Access Client Solution (ACS) 에뮬레이터 또는 브라우저 용 IBM iAccess for Web을 사용해야합니다.