UTF8 and AL32UTF8 是不同的:
UTF8 stores Unicode characters with code points > U+FFFF as two surrogate characters, three bytes each
一个汉字三个字节
AL32UTF8 stores Unicode characters with code points > U+FFFF as one four-byte character
一个汉字四个字节
UTF8 是在9i之前的版本使用的字符集,AL32UTF8是9i和10g字符集。
如果要连接9i以前的版本可以使用客户端为UTF8字符集,如果9i和10g,用AL32UTF8字符集或者
US7ASCII-----oracle内只支持英文字符集。
ZHS16GBK----中文字符集
AL32UTF8和UTF8----支持多国语言
环境变量设置:NLS_LANG(windows在注册表中搜索找到,linux在/etc/sysconfig/i18n)
显示数据库字符集命令:select * from NLS_DATABASE_PARAMETERS
前面答得很详细了,我来概括如下: 1、语言跟字符集无关,你只需关注 nls_lang 变量中.号后面的内容; 2、服务器端的字符集常规途径是改不了的; 3、客户端调用时所在会话的 nls_lang 应与操作系统的内码一致,比如 Windows,在命令行使用 chcp 命令可查看当前会话的内码,各版本的默认内码可在这查 http://msdn.microsoft.com/en-us/goglobal/cc563921.aspx 4、US7ASCII 可以保存中文吗?(Oracle 的字符集命名太他妈混乱了,不跟 ISO 标准,按理说 ASCII 中每个字符只有 7 bit,是无法表示中文的) 5、如果以前是正常的,应该是改对 B 的 nls_lang 就行的; 6、数据库有两个版本,应该使用高版本的客户端,本例即 10g,整个 9i 的夹着徒增混乱。