Oracle과 SQL Server 간의 공간 처리 차이점

3902 단어 sqlserveroraclesql
오라클을 업무용으로 사용할 때의 차이점을 발견하여 오라클과 SQL Server 사이의 공간 처리에 대한 실험을 진행했습니다.
(Oracle 버전은 Oracle 19c이고 SQL Server 버전은 SQL Server 2019입니다. 내 PC에 이미 설치되어 있기 때문입니다.)

실험


신탁



다음 표와 데이터로 실험을 진행했습니다.

CREATE TABLE CompareTestTable
(
     Seq         NUMBER
    ,ColCHAR     CHAR(10)
    ,ColVARCHAR  VARCHAR2(10)
);

INSERT INTO CompareTestTable VALUES( 1, 'aaa',  'bbb'  );       -- No space
INSERT INTO CompareTestTable VALUES( 2, 'aaa ', 'bbb ' );       -- A space after a string
INSERT INTO CompareTestTable VALUES( 3, ' aaa', ' bbb' );       -- A space before a string
INSERT INTO CompareTestTable VALUES( 4, ' aaa ', ' bbb ' );     -- Spaces after and before a string



select * from CompareTestTable where ColCHAR = 'aaa';       -- Hit SEQ=1,2 records
select * from CompareTestTable where ColCHAR = 'aaa ';      -- Hit SEQ=1,2 records
select * from CompareTestTable where ColCHAR = ' aaa';      -- Hit SEQ=3,4 records
select * from CompareTestTable where ColCHAR = ' aaa ';     -- Hit SEQ=3,4 records

select * from CompareTestTable where ColVARCHAR = 'bbb';    -- Hit SEQ=1 record
select * from CompareTestTable where ColVARCHAR = 'bbb ';   -- Hit SEQ=2 record
select * from CompareTestTable where ColVARCHAR = ' bbb';   -- Hit SEQ=3 record
select * from CompareTestTable where ColVARCHAR = ' bbb ';  -- Hit SEQ=4 record


열 유형이 Char일 때 문자열 뒤의 공백이 무시되는 것 같습니다.
그러나 Varchar2의 경우 문자열 뒤 또는 앞의 공백이 무시되지 않는 것 같습니다.
세부 사항은 다음과 같습니다
https://docs.oracle.com/cd/B13789_01/server.101/b10759/sql_elements002.htm#:~:text=Nonpadded%20Comparison%20Semantics,-Oracle%20compares%20two&text=If%20two%20values%20of%20different,the%20values%20are%20considered%20equal .

SQL 서버



Oracle의 경우와 마찬가지로 SQL Server에서 다음 표와 데이터로 실험을 진행했습니다.

CREATE TABLE CompareTestTable
(
     Seq         INT
    ,ColCHAR     CHAR(10)
    ,ColVARCHAR  VARCHAR(10)
)
INSERT INTO CompareTestTable VALUES( 1, 'aaa',  'bbb'  );       -- No space
INSERT INTO CompareTestTable VALUES( 2, 'aaa ', 'bbb ' );       -- A space after a string
INSERT INTO CompareTestTable VALUES( 3, ' aaa', ' bbb' );       -- A space before a string
INSERT INTO CompareTestTable VALUES( 4, ' aaa ', ' bbb ' );     -- Spaces after and before a string



select * from CompareTestTable where ColCHAR = 'aaa';       -- Hit SEQ=1,2 records
select * from CompareTestTable where ColCHAR = 'aaa ';      -- Hit SEQ=1,2 records
select * from CompareTestTable where ColCHAR = ' aaa';      -- Hit SEQ=3,4 records
select * from CompareTestTable where ColCHAR = ' aaa ';     -- Hit SEQ=3,4 records

select * from CompareTestTable where ColVARCHAR = 'bbb';    -- Hit SEQ=1,2 records
select * from CompareTestTable where ColVARCHAR = 'bbb ';   -- Hit SEQ=1,2 records
select * from CompareTestTable where ColVARCHAR = ' bbb';   -- Hit SEQ=3,4 records
select * from CompareTestTable where ColVARCHAR = ' bbb ';  -- Hit SEQ=3,4 records


Char의 결과는 Oracle과 동일합니다.
그러나 Varchar의 경우 Oracle과 SQL Server 간에 결과가 다르므로 문자열 뒤 또는 앞의 공백이 무시되는 것 같습니다.

따라서 위와 같은 Oracle과 SQL Server의 차이점 때문에 varchar를 사용할 때 주의해야 합니다.

좋은 웹페이지 즐겨찾기