Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

Sự khác biệt về cách xử lý khoảng trắng giữa Oracle và SQL Server

Tôi đã tiến hành một thử nghiệm về việc xử lý khoảng trắng giữa Oracle và SQL Server vì nhận thấy sự khác biệt khi sử dụng Oracle cho công việc của mình.
(Phiên bản của Oracle là Oracle 19c và phiên bản của SQL Server là SQL Server 2019 vì những phiên bản này đã được cài đặt trong PC của tôi.)

Thử nghiệm

Oracle

Tôi đã tiến hành một thử nghiệm theo bảng và dữ liệu sau.

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

Khoảng trắng sau chuỗi dường như bị bỏ qua khi kiểu colomn là Char.
Tuy nhiên, trong trường hợp của Varchar2, khoảng trắng sau hoặc trước chuỗi dường như không bị bỏ qua.
Chi tiết là sau đây
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% 20 khác nhau,% 20values% 20are% 20considered% 20equal.

Máy chủ SQL

Như trường hợp tương tự đối với Oracle, tôi đã tiến hành một thử nghiệm theo bảng và dữ liệu sau trên 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

Kết quả của Char giống như Oracle.
Tuy nhiên, trong trường hợp Varchar, kết quả là khác nhau giữa Oracle và SQL Server, các khoảng trắng sau hoặc trước chuỗi dường như bị bỏ qua.

Do đó, cần lưu ý khi sử dụng varchar vì sự khác biệt giữa Oracle và SQL Server như trên.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Khóa duy nhất trong Oracle với các ví dụ

  2. Oracle ORA-12154:TNS:Không thể giải quyết lỗi tên dịch vụ?

  3. Đếm số hàng đã nối trong phép nối bên trái

  4. Nhận loại dữ liệu của trường trong câu lệnh chọn trong ORACLE

  5. Oracle's SYS_GUID () UUID RFC 4122 có tuân thủ không?