首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

Oracle 9i 利用 COMPOSE 與 UNISTR 建立重音字元

     編輯:Oracle 資料庫相關知識

多國語言支援常需處理重音字元 (如 à, é, ô, ñ, ü)。Oracle 9i 引入 COMPOSE 與 UNISTR 兩大函數,以 Unicode 標準方式組合基底字元與重音符號。

核心函數

  • COMPOSE(str):接受包含基底字元 + 組合標記的 Unicode 字串,回傳正規化後的單一字元。
    範例:COMPOSE('a' || UNISTR('\0300')) → à (U+00E0)。
  • UNISTR('ascii \XXXX'):將 ASCII 字串中的 \XXXX 十六進位碼點轉換為 Unicode 字元。
    範例:UNISTR('a\0300') → 字串 a + 重音符 (U+0300)。

常見組合標記碼點

碼點名稱符號範例
U+0300Grave Accent`à (a + 0300)
U+0301Acute Accent´é (e + 0301)
U+0302Circumflex^ô (o + 0302)
U+0303Tilde~ñ (n + 0303)
U+0308Diaeresis/Umlaut¨ü (u + 0308)

實際應用範例

-- 1. 直接組合
SELECT COMPOSE('a' || UNISTR('\0300')) FROM DUAL;  -- à

-- 2. 使用 UNISTR 完整字串
SELECT COMPOSE(UNISTR('a\0300')) FROM DUAL;       -- à

-- 3. 建立法文城市名
SELECT COMPOSE(UNISTR('Caf\00E9')) FROM DUAL;     -- Café (直接用預組合碼點 U+00E9)
SELECT COMPOSE(UNISTR('Caf\0065\0301')) FROM DUAL;-- Café (e + acute)

-- 4. 查詢時正規化比對 (避免預組合 vs 分解碼點不匹配)
SELECT * FROM cities
WHERE COMPOSE(city_name) = COMPOSE(UNISTR('Caf\0065\0301'));

優勢

  • 無需特殊鍵盤/輸入法,純 SQL 產生任意重音字元。
  • 符合 Unicode 正規化標準 (NFC/NFD),解決「同樣視覺字元、不同碼點」的比對問題。
  • 適用於多語系應用、資料清洗、國際化測試資料生成。

善用 COMPOSE + UNISTR,讓 Oracle 成為多語言字元處理的強大引擎。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved