Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

Perbedaan penanganan spasi antara Oracle dan SQL Server

Saya melakukan percobaan tentang penanganan spasi antara Oracle dan SQL Server karena melihat perbedaan saat menggunakan Oracle untuk pekerjaan saya.
(Versi Oracle adalah Oracle 19c dan versi SQL Server adalah SQL Server 2019 karena ini telah diinstal di PC saya.)

Eksperimen

Oracle

Saya melakukan percobaan di bawah tabel dan data berikut.

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

Spasi setelah string tampaknya diabaikan ketika tipe kolom adalah Char.
Namun, dalam kasus Varchar2, spasi setelah atau sebelum string tampaknya tidak diabaikan.
Detailnya berikut ini
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% 20berbeda,%20nilai%20%20dianggap%20sama.

SQL Server

Seperti kasus yang sama untuk Oracle, saya melakukan percobaan di bawah tabel dan data berikut di 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

Hasil Char sama dengan Oracle.
Namun, dalam kasus Varchar, hasilnya berbeda antara Oracle dan SQL Server, spasi setelah atau sebelum string tampaknya diabaikan.

Oleh karena itu, perlu diperhatikan saat menggunakan varchar karena perbedaan antara Oracle dan SQL Server seperti di atas.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Akses layanan Web dari prosedur tersimpan Oracle

  2. apakah kunci asing selalu merujuk ke kunci unik di tabel lain?

  3. JPA - EclipseLink - Cara mengubah skema default

  4. Parsing json melalui json_table di Oracle 18

  5. Bagaimana cara menampilkan kesalahan di sqlplus