一、什么是oracle字符集
Oracle字符集是一个字节数据的解释的符号集合,有大小之分,有相互的包容关系。ORACLE 支持国家语言的体系结构允许你使用本地化语言来存储,处理,检索数据。它使数据库工具,错误消息,排序次序,日期,时间,货币,数字,和日历自动适应本地化语言和平台。
影响oracle数据库字符集最重要的参数是NLS_LANG参数。它的格式如下:
NLS_LANG = language_territory.charset
它有三个组成部分(语言、地域和字符集),每个成分控制了NLS子集的特性。其中:
Language 指定服务器消息的语言,territory 指定服务器的日期和数字格式,charset 指定字符集。如:AMERICAN _ AMERICA. ZHS16GBK
从NLS_LANG的组成我们可以看出,真正影响数据库字符集的其实是第三部分。所以两个数据库之间的字符集只要第三部分一样就可以相互导入导出数据,前面影响的只是提示信息是中文还是英文。
主要有三个
一个是oracle 服务器上的编码(这个是说数据存到服务器上以什么格式存放.)
一个是客户端的编码,(服务器返回给客户端的字符编码格式)
一个是 终端显示的编码.这个跟自己的操作系统有关,比如你要是装个英文版的系统不特别的装中文字库,在终端上当然无法显示字符.这个跟终端的属性有关.
终端: 在windows中就是 cmd后出来的那个窗口.在linux中就是命令行.
要不出现乱码就是得这三个字符 形式得一样活着兼容. 兼容 我不熟悉了.暂不阐述.
服务器上的编码: 通过下面的命令可以查看这个是安装oracle的时候指定的.
selelct userenv('language') from dual;
我的电脑显示的是 SIMPLIFIED CHINESE_CHINA.AL32UTF8
为了你显示中文也可以 设置成gbk SIMPLIFIED CHINESE_CHINA.ZHS16GBK
如果说需要改服务器的编码可以通过这个命令不过 小心使用,因为如果你以前的数据库,使用的是别的编码,于是在编码转换过程中有可能会出现数据丢失和错误.所以重要的数据一定先备份.
运行—— cmd
c: sqlplus / as sysdba
SQL> shutdown immediate;
SQL> startup mount;
SQL> alter system enable restricted session;
SQL> alter system set job_queue_processes=0;
SQL> alter database open;
SQL> alter database character set internal_use AL32UTF8;
SQL> shutdown immediate;
SQL> startup客户端编码:
如果是在windows下面可以到注册表中直接修改
HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\ 寻找这个 NLS_LANG的值
让他改为跟 服务器的一样. SIMPLIFIED CHINESE_CHINA.AL32UTF8
或者 SIMPLIFIED CHINESE_CHINA.ZHS16GBK
在unix平台下,就是环境变量NLS_LANG。
$echo $NLS_LANG
第三个终端显示
如果数据库字符集和sqlplus的字符集一致, 还是不能正确显示了, 那很可能就是你的终端应用程序的字符集不支持了. 例如你用bash登陆sqlplus, 如果你的bash是个小字符集, 那么就不能正常显示了.linux修改bash的字符集, 可以先键入locale, 看有哪些环境变量, 再用export设置.
windows中在控制台中,右键-> 默认值里面有个设置语言的.