sql >> Database teknologi >  >> RDS >> Oracle

Forskellen i håndteringen af ​​mellemrummene mellem Oracle og SQL Server

Jeg udførte et eksperiment om håndteringen af ​​mellemrummene mellem Oracle og SQL Server, fordi jeg bemærkede forskellen, når jeg brugte Oracle til mit arbejde.
(Oracles version er Oracle 19c og SQL Servers version er SQL Server 2019, da disse allerede var installeret på min pc.)

Eksperiment

Oracle

Jeg udførte et eksperiment under følgende tabel og 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

Mellemrummet efter streng lader til at blive ignoreret, når kolonnetypen er Char.
Men i tilfælde af Varchar2 synes mellemrummet efter eller før strengen ikke at blive ignoreret.
Detaljen følger
https://docs.oracle.com/cd/B13789_01/server.101/b10759/sql_elements002.htm#:~:text=Nonpadded%20Comparison%20Semantics,-Oracle%20compares%20two&text=If%20estwo%2%2 20forskellige,%20værdierne%20anses%20 for%20lige.

SQL Server

Som det samme tilfælde for Oracle, udførte jeg et eksperiment under følgende tabel og 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 af Char er det samme som Oracle.
Men i tilfælde af Varchar er resultatet anderledes mellem Oracle og SQL Server, mellemrummene efter eller før strengen ser ud til at blive ignoreret.

Derfor skal det bemærkes, når du bruger varchar på grund af forskellen mellem Oracle og SQL Server som sådan ovenfor.


  1. Postgresql:Sådan finder du filen pg_hba.conf ved hjælp af Mac OS X

  2. Planlagt kørsel af lagret procedure på SQL server

  3. MySQL utf8mb4, Fejl ved lagring af Emojis

  4. Opret en beregnet kolonne, der bruger data fra en anden tabel i SQL Server