很多語言
包括英語在內
都使用沉音字符(accented character)
因為這些字符不屬於 ASCII 字符集
所以如果不查看 Unicode 值也不使用 Unicode 編輯器並將其轉成一個已知字符集
就很難編寫使用這些字符的代碼
Oracle
i引入了 COMPOSE 函數
該函數接受一串 Unicode 字符並規則化其文本
這就意味著它可以接受一個字母和一個組合標記
比如說
a
(Unicode 字符
)和沉音符(Unicode 字符
)
然後創建一個單獨的由兩個標記組合而成的字符
COMPOSE 使用特殊的組合標記
而沒有使用 ASCII 中相應的音節標記
它所使用的特殊的組合標記是Unicode 標准的一部分
上面的例子的結果應該是 Unicode 字符
E
(有一個沉音符的小寫拉丁字母
a
)
在 ANSI 中最常見的組合字符有
·U+
沉音符(grave accent)( ` )
·U+
重音符(acute accent)(
)
·U+
抑揚音符號(circumflex accent)(^)
·U+
颚化符號(tilde)(~)
·U+
元音變音
如果沒有特殊的軟件或者鍵盤驅動程序的話
很難在鍵盤上輸入 Unicode 字符
和
因此
以純 ASCII 文本輸入 Unicode 序列的一個方法是使用 UNISTR 函數
這個函數接受一個 ASCII 字符串然後以國家字符集(通常作為
位 Unicode 或者 UTF
字符集安裝)創建一個 Unicode 字符的序列
它使用十六進制占位符序列映射任何非 ASCII 字符
映射方式與 Java 類似
要輸入 a 後接一個沉音符組合字符的序列
可以使用 UNISTR(
a\
)
而不要試圖直接在代碼中輸入字符
這個函數在任何字符集以及任何具有基於 Unicode 的國家字符集的數據庫下都可以正常運行
可以將多個組合字符放在函數中——可以在 UNISTR 函數中混合使用 ASCII 和 Unicode 占位符
例如
可以像下面這樣使用 UNISTR 函數
select COMPOSE(UNISTR(
Unless you are nai\
ve
meet me at the cafe\
with
your re\
sume\
)) from dual;
在將 UNISTR 函數的輸出與 COMPOSE 組合時
可以在不查找任何值的情況下生成一個 Unicode 字符
例如
select
it is true
if compose(unistr(
a\
)) = unistr(
\
e
);
From:http://tw.wingwit.com/Article/program/SQLServer/201311/22235.html