常见字符问题介绍
? 下面介绍的问题都是由于这着这两种字符集的兼容性产生的。
? 情况一 数据库字符集为ZHS16GBK,客户端字符集为:ZHS16GBK.
这种情况下数据库和客户端的字符集完全一致,在插入和显示简,繁体字 符时都不会有问题。
? 情况二数据库字符集为ZHS16GBK,客户端字符集为ZHS16CGB231280
由于客户端的字符集是数据库字符集的子集,,查询时有些繁体字会显示为乱码,原因是客户端的字符集中没有包含当前显示字符,其他的繁体字oracle会根据客户端的字符集将他们穿换成简体字后显示出来。此时客户端能否插入繁体字成功取决于所插入的繁体字是否包含在数据库的字符集当中.
情况三数据库字符集为ZHS16CGB231280,客户端为ZHS16CGB231280.
可以显示繁体字.插入繁体字时如果插入的繁体字包含在数据库的字符集中就可以正常插入,否则报ORA-01756: 括号内的字符串没有正确结束,原因是oracle由于自身字符集中没有包括该繁体字,所以将他作为单字节处理,导致语法解析时出错。
? 情况四数据库字符集为ZHS16CGB231280,客户端为ZHS16GBK.
此时客户端查询时,很多的繁体字显示为乱码,简体字可以正常显示.可以插入 繁体字,但繁体字插入后,oracle会将它们全部转换成简体字.
? 结论
从以上几种情况可以看出:
? 出现乱码的原因是数据库,客户端的字符集不一致造成,只要修改客户端字符集就可以解决.客户端如果是linux系统,修改用户的环境变量中字符集的类型。如果是windows,直接修改注册表中oracle_home下的NLS_LANG的值。
? 对于需要同时存储简体中文和繁体中文时,应首先选择ZHS16GBK,而不是ZHS16CGB231280,因为前者包含的字符是后者的3倍多.当然,现在的UNICODE字符集也可以选择,它可以存储各种语言字符.