有關 Firebird embed ICU 版本異動遇到的問題心得。 |
|
RootKit
資深會員 ![]() ![]() ![]() ![]() ![]() 發表:16 回覆:358 積分:419 註冊:2008-01-02 發送簡訊給我 |
OK!長話短說,我最近嘗試解決 中文與英文大小寫忽略(在 SQL Search)發覺若 UTF8 配合 LOCALE=zh_Hant_TW 會出現錯誤或是定義無效。查了一下是 ICU 版本(FIREBIRD 附帶)太舊並未加入類似 BIG_5_UNICODE、zh_Hant_TW 等。
下載了 ICU 4-6-1 版。將原 icu*30.dll 刪除至換為 icu*46.dll 發覺再載入 fbembed.dll 時會產生錯誤 找不到 icuuc30.dll 既使我設定了 RootDirectory 等等也無效。上網找不到有關設定的資料。 接下來,我發現使用 IExpert 卻無此問題。原來 IExpert 在啟動時會載入 IExpert 內定的 fbembed.dll 資料夾 IBEUDB,然後登入資料庫時使用新的ICU fbembed.dll 路徑。我想總不能 既保留 icu*30 部分吧。那程式看起來有點遜! 最終我 Disassembler fbembed.dll 發現內定為 icuuc30.dll 。正準備用 VS08 重新編譯 fbembed.dll 時,很懶不如直接修改 bembed.dll 中 icuuc30.dll 改為 icuuc46.dll 看看。將函數呼叫 _3_0 改為 _46 居然可以直接載入,而且還 OK (暫時用起來沒問題) 這不會太神奇吧。 這個發現暫時記錄在此。 PS. 為了克服中文排序與大小忽略 到發現 ICU 版本需要自行下載並解決,搞了我快暈倒(五六個小時)。 CREATE COLLATION MYBIG5 FOR UTF8 FROM UNICODE CASE INSENSITIVE ''LOCALE=zh_Hant_TW;ICU-VERSION=4.6''; ALTER CHARACTER SET UTF8 SET DEFAULT COLLATION MYBIG5; 編輯記錄
RootKit 重新編輯於 2012-10-19 00:27:11, 註解 無‧
|
RootKit
資深會員 ![]() ![]() ![]() ![]() ![]() 發表:16 回覆:358 積分:419 註冊:2008-01-02 發送簡訊給我 |
|
GrandRURU
站務副站長 ![]() ![]() ![]() ![]() ![]() ![]() 發表:240 回覆:1680 積分:1874 註冊:2005-06-21 發送簡訊給我 |
|
RootKit
資深會員 ![]() ![]() ![]() ![]() ![]() 發表:16 回覆:358 積分:419 註冊:2008-01-02 發送簡訊給我 |
|
leveon
資深會員 ![]() ![]() ![]() ![]() ![]() 發表:30 回覆:389 積分:303 註冊:2012-02-12 發送簡訊給我 |
純粹猜想 Firebird 似乎是自行精簡 ICU
如果去下載IBM網站下載 icudt30.dll 8MB 的版本 搞不好就能夠解決 ftp://ftp.software.ibm.com/software/globalization/icu/3.0/ ===================引 用 RootKit 文 章=================== 補充: FIREBIRD 所附的 ICU 版本為 3.0,也許考量檔案大小的關係。事實上在支援中文上,有些欠缺。 如果在 Create DataBase 時使用 CharSet = None 會導致在搜尋資料時 例如 Select .... Like '%控%' 控這個字內碼為 B1B1 只要符合內碼(不會考慮MultiByte),會跑出不正確的資料。 並且為大小寫敏感。排序文字無法按照筆畫等。 但然如果不考慮以上因素,原 ICU 版本就夠用了。 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |