sql >> Databasteknik >  >> RDS >> Oracle

Skillnad i hanteringen av utrymmena mellan Oracle och SQL Server

Jag genomförde ett experiment om hanteringen av utrymmena mellan Oracle och SQL Server eftersom jag märkte skillnaden när jag använde Oracle för mitt arbete.
(Oracles version är Oracle 19c och SQL Servers version är SQL Server 2019 eftersom dessa redan hade installerats på min PC.)

Experiment

Oracle

Jag genomförde ett experiment under följande tabell och data.

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

Mellanrummet efter strängen verkar ignoreras när kolumntypen är Char.
Men i händelse av Varchar2, tycks utrymmet efter eller före strängen inte ignoreras.
Detaljen följer
https://docs.oracle.com/cd/B13789_01/server.101/b10759/sql_elements002.htm#:~:text=Nonpadded%20Comparison%20Semantics,-Oracle%20compares%20two&text=If%20estwo%2%20 20olika,%20värdena%20 anses%20lika.

SQL Server

Som samma fall för Oracle genomförde jag ett experiment under följande tabell och data på 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

Resultatet av Char är detsamma som Oracle.
Men i händelse av Varchar är resultatet annorlunda mellan Oracle och SQL Server, mellanslagen efter eller före strängen verkar ignoreras.

Därför bör det noteras när du använder varchar på grund av skillnaden mellan Oracle och SQL Server som sådan ovan.


  1. Undersökningar med EXISTS vs IN - MySQL

  2. Vad är skillnaden mellan 'ÅÅÅÅ' och 'RRRR' i Oracle SQL

  3. Bästa metoder för MySQL-replikering

  4. TSQL md5-hash som skiljer sig från C# .NET md5