2009-06-19 5 views
2

SQL을 사용하여 Derby에서 자동으로 VARCHAR을 테이블 필드 길이로자를 수 있습니까?VARCHAR을 Derby에서 특정 길이로 자른다 자동으로

구체적으로 :

A truncation error was encountered trying to shrink VARCHAR '123' to length 2. 

이 예외를 억제 할 수있는 쉬운 방법이 있나요 :

CREATE TABLE A (B VARCHAR(2)); 
INSERT INTO A B VALUES ('1234'); 

는 SQLException을 발생 것인가?

답변

3

아니요. 메타 데이터를 확인한 후에는 잘라야합니다. 또는 매번 메타 데이터를 확인하지 않으려면 코드와 데이터베이스를 동기화 상태로 유지해야합니다. 그러나 큰 문제는 아니며, 유효성 검사기에 대한 일반적인 관행입니다.

+0

이 테이블은 모든 곳에서 사용됩니다. 코드를 동기화 상태로 유지하는 것은 쉽지 않습니다. –

+0

데이터베이스와 동기화되어 있음을 의미합니다. 그것의 큰 거래가 아니라, 그것은 지금 당장 그리고 모든 것이 아닐 것입니다. 데이터베이스에서 필드의 길이를 얼마나 자주 수정할 것인지 질문하십시오. 이러한 일종의 유효성 검사는 데이터베이스 제약 조건과 관련이 있습니다.이 문제는 전혀 발생하지 않습니다. –

+0

그리고 정말로 그렇게하고 싶다면 삽입하기 전에 메타 데이터를 확인하십시오. 그럼에도 불구하고 성능이 떨어질 수 있습니다. –

0

varchar를 삽입하기 전에 잘라낼 수 있습니다. 삽입 스크립트/프로 시저에서 trim 함수를 사용하십시오.

저는 Derby에 익숙하지 않지만 MSSQL에서 똑같은 작업을합니다. 자르기 오류를 피하기 위해 잘라 내기 오류 (전체 데이터가 필요하지 않은 경우에만 사용)를 사용하면 길이를 늘리는 것이 훨씬 더 좋습니다 varchar

+0

것은 여기에는 바람직하지 않습니다, 저는 믿습니다. 그는 잘림 문제가 없으며 잘라내기를 선호하는 행동입니다. 둘째, 공간에 대해서만 작업하십시오. –

0

당신은 SUBSTR를 사용할 수 있습니다 경우

CREATE TABLE A (B VARCHAR(2)); 
INSERT INTO A B VALUES (SUBSTR('1234', 1, 2)); 

당신이 준비가 문을 사용하십시오 VARCHAR 증가

INSERT INTO A B VALUES (SUBSTR(?, 1, 2)); 
관련 문제