oracle 12.2+支援collate
阿新 • • 發佈:2021-08-31
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(15CHAR) 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
LightDB Enterprise Postgres--金融級關係型資料庫,更快、更穩、更懂金融!