1. 程式人生 > 其它 >oracle 12.2+支援collate

oracle 12.2+支援collate

sql server, mysql, postgresql都支援針對字串型別定義排序規則的概念(collate),一般來說,排序規則分為三種:基於二進位制,是否區分大小寫,是否區分重音。

例如sql server中:

SELECT * FROM MyTable
WHERE MyField = 'BobDillon' COLLATE Latin1_General_CI_AI

oracle可以使用:

SELECT *
FROM MyTable
WHERE NLSSORT(MyField, 'NLS_SORT = Latin_CI') = NLSSORT('BobDillon', 'NLS_SORT = Latin_CI
')

postgresql中:

CREATE TABLE test1 (
    a text COLLATE "de_DE",
    b text COLLATE "es_ES",
    ...
);
SELECT a < ('foo' COLLATE "fr_FR") FROM test1;

https://www.postgresql.org/docs/13/collation.html

oracle 12.2開始支援collate的概念,使用也類似:

CREATE TABLE t1 (
  id          NUMBER,
  company     VARCHAR2(15
CHAR) COLLATE BINARY_CI, CONSTRAINT t1_pk PRIMARY KEY (id) ); INSERT INTO t1 VALUES (1, 'Löwenbrauerei'); INSERT INTO t1 VALUES (2, 'LÖwenbrauerei'); INSERT INTO t1 VALUES (3, 'Lowenbrauerei'); INSERT INTO t1 VALUES (4, 'LOwenbrauerei'); COMMIT; ALTER TABLE t1 ADD ( location VARCHAR2(15 CHAR
) COLLATE BINARY_AI ); UPDATE t1 SET location = 'Bräunlingen' WHERE id = 1; UPDATE t1 SET location = 'BrÄunlingen' WHERE id = 2; UPDATE t1 SET location = 'Braunlingen' WHERE id = 3; UPDATE t1 SET location = 'BrAunlingen' WHERE id = 4; COMMIT; SELECT * FROM t1 WHERE location LIKE '%ä%'; ID COMPANY LOCATION ---------- --------------- --------------- 1 Löwenbrauerei Bräunlingen 2 LÖwenbrauerei BrÄunlingen 3 Lowenbrauerei Braunlingen 4 LOwenbrauerei BrAunlingen -- 也支援表級別預設的COLLATE CREATE TABLE t1 ( id NUMBER, company VARCHAR2(15 CHAR), CONSTRAINT t1_pk PRIMARY KEY (id) ) DEFAULT COLLATION BINARY_CI; -- schema級別也支援預設的COLLATE CREATE USER test2 IDENTIFIED BY test2 DEFAULT TABLESPACE users QUOTA UNLIMITED ON users DEFAULT COLLATION BINARY_CI; -- 還支援語句級別、會話級別

更多可參考:

https://oracle-base.com/articles/12c/column-level-collation-and-case-insensitive-database-12cr2

https://docs.oracle.com/en/database/oracle/oracle-database/12.2/refrn/ALL_TAB_COLS.html#GUID-85036F42-140A-406B-BE11-0AC49A00DBA3

LightDB Enterprise Postgres--金融級關係型資料庫,更快、更穩、更懂金融!