看板 Soft_Job 關於我們 聯絡資訊
※ 引述《eviliori (穿著88s的惡魔)》之銘言: : 小弟在Unix上用c開發系統,資料庫是使用db2 : 最近碰上個棘手的問題,就是頂頂大名的許功蓋問題 : 系統在編譯程式時,遇到這幾個字就編譯不過 : 有試著在字後面加上\,但仍是不一定所有的Unix環境都可以編譯過 : 請問有什麼一勞永逸的解決方式呢? 本來只想推文的,但是內容有點多。 因為我不知道您的環境為何,你只給一個 Unix 系統。 我不知道您是指 Linux, BSD, MacOS X 這類的 Unix-Like 還是 certified Unix 像 Solaris, AIX 或 HP-UX? (您用 DB2,我會猜是 AIX 啦,不過我對 AIX 與 DB2 不熟, 所以不清楚您所謂在某些環境編不過是怎麼一回事。) 我會先猜測可能與 i18n, locale 有關, 也有可能跟 POSIX, XOPEN 等 standard 問題相關。 當然也可能跟你用的 C library 不同有關, 例如 BSD 會用自己的 C lib, embedded system 會用 uClibc, 而一般的 Linux 則大多用 glibc。 您要自己找出來為什麼有些環境編譯不能過,這一點我沒辦法幫你。 至於 DB2 處理的部份, 我看了您的問題,在於 DB2 本身 code set 的問題, 可能沒有辦法去更改設定,那如果是我,我會這樣處理: 1. 用一個抽象層把 db 包起來,要 insert, select 都透過那個抽象層。 2. 寫兩隻函式,如果用 C++ 的話也可以寫成 member functions,分別為: addslashes() delslashes() 就是碰到有 \ 的字如許蓋功時就幫他多加一個 \。 3. 處理資料時: 要 insert, update 時一定要 call addslashe() 處理一次。 要 select 時一定要 call delslashes() 一次。 我對這個問題的解法很感興趣, 如果您不介意,我們可以一起討論解法, 如果有不方便的地方可以寫信給我。 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 123.193.174.198
ImOnLine:不是只有編譯不會過嗎?難道連insert資料也會當?? 09/29 09:58