2014-12-12 9 views
2

내 장점 데이터베이스에이 비슷한을 가지고있다 -장점 데이터베이스, 대소 문자 구분 및 데이터 정렬

drop table #test; 

create table #test (x cichar(50)); 
insert into #test (x) values ('cheese'); 
insert into #test (x) values ('fromage'); 
insert into #test (x) values ('Queso'); 

select 
    t1.x t1_x, 
    t2.x t2_x 
from 
    #test t1 
    inner join 
    (
    select 
     'CHEESE' x // String literal will be of type VARCHARFOX 
    from 
     system.iota 
) t2 
    on t1.x=t2.x 

이 나에게 메시지를 제공합니다 : -

poQuery: Error 7200: AQE Error: State = HY000; NativeError = 2213; [iAnywhere Solutions] [Advantage SQL Engine]Invalid comparison or operation on strings with different collations. ** Script error information: -- Location of error in the SQL statement is: 137 (line: 5 column: 1)

내가 좋아하는 것 : - 리터럴 'CHEESE'문자열 임시 테이블이다에서 VARCHARFOX과 열을 입력되기 때문에

t1_x t2_x 
cheese CHEESE 

은 대소 문자를 구분하지 않으려 고하기 때문에 cichar를 입력하십시오.

비교에 'COLLATE ads_default_ci'를 추가하여이 인스턴스를 수정할 수 있지만 번거롭고 정확한 구문을 기억할 수 없습니다.

필자는 열 유형이나 데이터베이스 구성에 근본적으로 잘못된 것을 수행해야한다고 생각합니다.이 작업을 수행하는 데있어 우아하고 올바른 방법은 무엇입니까?

답변

1

문자열 리터럴이 문제가 아니기 때문에 문자열 리터럴은 대개 정상적으로 작동합니다.

그들은 the COERCION_COMPATBILE collation 수 :

TRY drop table #test; CATCH ALL END TRY; 

create table #test (x cichar(50)); 
insert into #test (x) values ('cheese'); 
insert into #test (x) values ('fromage'); 
insert into #test (x) values ('Queso'); 

select 
    t1.x t1_x, 
    'CHEESE' t2_x 
from 
    #test t1 
where 
    t1.x='CHEESE' 

문제는 당신이 파생 테이블을 소개하고 있음과 ADS 엔진으로 파생 테이블 필드의 데이터 유형을 결정한다는 것입니다 VARCHARFOX(6) :

select 
    'CHEESE' x 
from 
    system.iota 

나는 이것을 할 수있는 쉬운 방법이 없다고 생각합니다.

나는 an upstream request on the ADS forum을 만들었습니다.

나는 또한 이것을 기반으로 feature request을 추가했습니다. 구현 된 경우 솔루션은 다음과 같습니다.

select 
    CICHAR'CHEESE' x 
from 
    system.iota 

나는 이것이 깨끗한 해결책이라고 생각합니다.

데이터 정렬 associated with each connection 있습니다 :

당신은 또한 다른 것을 알고 있어야합니다.

NCHAR은 대/소문자를 구분하지 않는 데이터 정렬의 경우에도 대/소문자를 지원합니다. 사용되는 것은 현재 연결의 데이터 정렬에 따라 다릅니다.

AdsSetCollation 함수를 사용하여 현재 연결에 대한 데이터 정렬을 설정할 수 있습니다 (또는 개발 환경에 해당하는 경우). 예를 들어 연결 속성에 ARC를 설정할 수 있습니다.

+0

네, 그렇습니다. 파생 된 테이블이 있어야합니다. 나는 그것을 기술하기 위해 올바른 말씨를 찾고 있었다. 하지만 당신은 파생 된 테이블과 다른 무엇인가를 얻습니다. –