線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:4360
推到 Plurk!
推到 Facebook!

有關 Firebird embed ICU 版本異動遇到的問題心得。

 
RootKit
資深會員


發表:16
回覆:358
積分:419
註冊:2008-01-02

發送簡訊給我
#1 引用回覆 回覆 發表時間:2012-10-19 14:25:39 IP:36.228.xxx.xxx 訂閱
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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2012-10-19 14:33:51 IP:36.228.xxx.xxx 訂閱
如果有更簡單的方法或設定,請告訴我!
Thanks.
GrandRURU
站務副站長


發表:240
回覆:1680
積分:1874
註冊:2005-06-21

發送簡訊給我
#3 引用回覆 回覆 發表時間:2012-10-20 07:56:34 IP:111.249.xxx.xxx 訂閱
想不到還有這麼多問題啊!

請恕我愚味,我一直以為只要去官網下載更新的版本就好 @@

又上了一課!謝謝RootKit大的分享!

===================引 用 RootKit 文 章===================
如果有更簡單的方法或設定,請告訴我!
Thanks.
RootKit
資深會員


發表:16
回覆:358
積分:419
註冊:2008-01-02

發送簡訊給我
#4 引用回覆 回覆 發表時間:2012-10-24 10:58:33 IP:36.228.xxx.xxx 訂閱
補充:

FIREBIRD 所附的 ICU 版本為 3.0,也許考量檔案大小的關係。事實上在支援中文上,有些欠缺。
如果在 Create DataBase 時使用 CharSet = None 會導致在搜尋資料時
例如 Select .... Like '%控%' 控這個字內碼為 B1B1 只要符合內碼(不會考慮MultiByte),會跑出不正確的資料。
並且為大小寫敏感。排序文字無法按照筆畫等。

但然如果不考慮以上因素,原 ICU 版本就夠用了。



leveon
資深會員


發表:30
回覆:389
積分:303
註冊:2012-02-12

發送簡訊給我
#5 引用回覆 回覆 發表時間:2012-11-01 15:37:05 IP:118.165.xxx.xxx 訂閱
純粹猜想 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 版本就夠用了。



系統時間:2024-04-23 18:26:37
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!