推 ImOnLine:不是只有編譯不會過嗎?難道連insert資料也會當?? 09/29 09:58
※ 引述《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