作者iman00b (I'm a n00b)
看板Soft_Job
标题Re: [讨论] UNIX上的许功盖问题
时间Thu Sep 25 20:23:55 2008
※ 引述《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
1F:推 ImOnLine:不是只有编译不会过吗?难道连insert资料也会当?? 09/29 09:58