讨论服务器端和客户端工具字符集问题。
这里提到的客户端工具包括isql、exp、imp、obsv等使用了dmapi连接数据库的工具。
初始化建库工具initdb有unicode编码参数选项,一般来说,选择默认的unicode=0,即不使用unicode编码。
1. 服务器端和客户端字符集一样,则客户端不需要做转换。
2. 如果服务器端和客户端字符集不一样,dmapi会自动判别并做转换。
比如:服务器是GBK编码,而客户端是unicode编码,客户端判断本地编码,连接到服务器后取得服务器端返回的编码,
两者不一样则在连接上置转换标记为TRUE,这样两者交互传递消息时就可以相互转换,从而保证各自的编码为自身所识别。
反之,服务器端是unicode编码而客户端是GBK编码也可以正确地交互。
以上两条原则还比较好理解,下面再引入两种情况:
3. 客户端工具本身打印的中文信息显示时遇到的字符集问题
由于编写客户端工具时,其中涉及到提示的中文都是在windows系统下书写的,因此为GBK编码,到了默认unicode编码(如utf-8)
的系统上(如麒麟64位、suse linux、中标5.0等)显示出来的是乱码。
因此在编写客户端工具时,客户端需要判断本地编码如果是unicode则要将中文字符串转换。同时也要设置env环境句柄上的local_code属性为本地编码,
这样服务器返回来的消息通过dmapi自动转换,不需要客户端工具自己再做转换了。
4. 复杂一些的导入导出工具字符集问题
在做导出时,保存的实际数据的编码格式是和客户端本地编码相同,而和服务器端编码格式无关。
也就是说如果客户端本地编码是GBK,那么导出的数据编码也是GBK。
dmp文件头中只要记录下本地编码,导入工具就可以根据这个信息设置客户端env的编码,即可导入。
如果这个编码和本地编码不一致,则可能还需要转换一下api从服务器返回的消息。
另外一种方法:导出都按照服务器的编码。这样导出的时候客户端env编码要设置成和服务器一样。

讨论了服务器端与客户端工具在不同字符集环境下的兼容性问题,包括自动转换机制、客户端工具中文显示问题及导入导出工具的具体处理方式。

773

被折叠的 条评论
为什么被折叠?



