关于字符集的几句话

on

1. 输入时,如果Oracle客户端字符集跟Oracle服务器端字符集设置不一样,那么输入的字符就会做字符转换,最终以服务器端的字符集存入数据库

2. 输入时,如果Oracle客户端字符集跟Oracle服务器端字符集设置一样,那么不会有任何字符转换,最终以客户端操作系统字符集(不是Oracle客户端字符集)存入数据库

3. 输出时,如果Oracle客户端字符集跟Oracle服务器端字符集设置不一样,那么输出的字符会做字符转换,如果客户端操作系统字符集能够正确解释,那么输出显示正确,否则乱码

4. 输出时,如果Oracle客户端字符集跟Oracle服务器端字符集设置一样,那么不会有任何字符转换,如果客户端操作系统字符集能够正确解释,那么输出显示正确,否则乱码

这就是为什么我们即使设置了数据库字符集是US7ASCII这样无法保存双字节的英文字符集,只要Oracle客户端也是US7ASCII,客户端的操作系统又是中文操作系统,那么仍然可以正确地存储并且显示中文的原因。

7 Comments Add yours

  1. edeed says:

    不错,4语中的!

  2. 5415 says:

    每个字我都认识,但整篇文章我就是看不懂:(

    kamus能不能再写得通俗点?

  3. kamus says:

    @5哥
    实在是没办法了,对于技术文章还是写不成像5哥你那篇Linux介绍样的通俗易懂。

  4. 5415 says:

    呵呵,我现在回头看前几年的文章会觉得脸红,其实写得不好,当时还自以为是以为自己写得很棒。

  5. kissingwolf says:

    需要认识到并不完全是指操作系统的字符集,在Unix和类Unix中启动oracle 实例的时候是根据启动环境的字符集设置的。比如你的linux是zh_CN.UTF-8 ,你启动oracle的脚本是oracle_start.sh , 在oracle_start.sh中头部你定义了 LANG=”zh_CN.GB2312″,SUPPORTED=”zh_CN.GB2312:zh_CN:zh” , LANG ,那么在oracle的运行环境中字符集就是zh_CN.GB2312的! 其他程序可以就此推广,这也是系统大环境和程序运行小环境区别!因为其运行在独立的shell环境中!

  6. kamus says:

    @kissingwolf
    这一点是没错的,其实也就是环境变量的设定问题,单独设定的环境变量将会覆盖默认的环境变量

Leave a Reply to 玉面飞龙 Cancel reply

Your email address will not be published. Required fields are marked *