目录
最最重要的是:
先确认SSH工具(如CRT)中的显示编码,一定为UTF8模式再进行如下操作。否则即使系统设置为中文也是白搭。
一、首先判断linux系统是否安装或支持中文系统
1、通过locale -a查看
只要有如下几个过滤选项,则说明安装了中文包,现在版本linux(Centos,redhat,oracle linux) 6/7/8系列都默认安装中文语言。
[root@yczbora /]# locale -a|grep zh_CN
zh_CN
zh_CN.gb18030
zh_CN.gb2312
zh_CN.gbk
zh_CN.utf-8
2、如何将系统进行中英文字符切换
英文切换为中文:将LANG="en_US.UTF-8"设置为LANG="zh_CN.UTF-8"
中文切换为英文:将LANG="zh_CN.UTF-8"设置为LANG="en_US.UTF-8"
(1)6系列位置:
[root@test~]# vi /etc/sysconfig/i18n LANG="en_US.UTF-8" #LANG="zh_CN.UTF-8" SYSFONT="latarcyrheb-sun16"
(2)7/8系列位置:
[root@test ~]# vi /etc/locale.conf #LANG="en_US.UTF-8" LANG="zh_CN.UTF-8"
3、如何在系统进行上述2中英文切换后,用户登录后自动切换为相应的系统语言
确保在所有用户的变量下.bash_profile,.bashrc,/etc/profile下,都没有限定系统语言的变量:
LANG="en_US.UTF8" 或LANG="zh_CN.UTF-8"
4、如何在系统进行上述2中英文切换后,用户登录后保持为之前的语言
(1)如系统由英文切换成了中文,让root用户仍然保持英文。
设置增加如下:
[root@yczbora ~]# vi ~/.bash_profile export LANG="en_US.UTF-8"
(2)如系统由中文切换成了英文文,让root用户仍然保持中文。
设置增加如下:
[root@yczbora ~]# vi ~/.bash_profile export LANG="zh_CN.UTF-8"
5、如果系统有桌面,想让桌面,文档等显示中文,设置完2后,如下操作
(1)可以进入桌面确认一下切换语言(“更新名称”或“Update names”)
则家/home目录下的所有目录显示才会切换为中文/英文,如果不进入系统界面确认,则不会主动切换为中文/英文。
二、LANG和NLS_LANG的区别
1、两者区别
LANG是针对Linux系统的语言、地区、字符集的设置,对linux下的应用程序有效,如date;
NLS_LANG是针对Oracle语言、地区、字符集的设置,对oracle中的工具有效,如sqlplus,pl/sql developer;
2、两者设置的值:
(1)LANG一般设置为两种:
LANG=en_US.UTF8 #############系统或当前用户为英文模式 LANG=zh_CN.UTF8 #############系统或当前用户为中文模式
(2)NLS_LANG也设置为两种:
NLS_LANG=AMERICAN_AMERICA.UTF8; #########linux下使用 NLS_LANG=AMERICAN_AMERICA.ZH16GBK; #######windows下经常使用
3、对于客户端(sqlplus,pl/sql developer)
(1)如果sqlplus中插入中文报错,则设置.bash_profile
NLS_LANG=AMERICAN_AMERICA.UTF8
(2)如果pl/sql developer中插入中文报错,则设置
设置方法:计算机->属性->高级系统设置->环境变量->新建 设置变量名:NLS_LANG,变量值:第1步查到的值, 如:AMERICAN_AMERICA.ZHS16GBK;
4、ORACLE用户下的几个测试:
前提:不管系统的/etc/locale.cnf中和用户的.bash_profilebash_profile中的LANG参数,
都设置为中文模式或者是英文模式或者为相反模式
(1)oracle的.bash_profile参数只要设置为并生效:
export NLS_LANG=AMERICAN_AMERICA.UTF8, 就可以在SQL plus下写入中文字符,且可以展示。
(2)oracle的.bash_profile参数只要设置为并生效:
export NLS_LANG= , 在SQL plus下就无法写入中文字符,或展示。
(3)结论:
NLS_LANG只是为oracle客户端sqlplus或其他客户端工具是否支持中文而生,所以不管何种情况:
NLS_LANG都设置为AMERICAN_AMERICA.UTF8(数据库字符集是UTF8的)。 NLS_LANG都设置为AMERICAN_AMERICA.ZHS16GBK(数据库字符集是ZHS16GBK的)
三、还有一种情况,案例
前提是SSH客户端设置未utf8字符显示。
echo $LANG后,出现en_US;有些系统是en_US.utf8。
这种情况,如果系统设置en_US.utf8,使用中文输入。在en_US语言系统下是乱码的。需要将$LANG=en_US.utf8才可以。
1、系统A
更改为SET $LANG=en_US.utf8,虽然还是显示en_US,但可以读取中文了。
(2023-02-02更新)
文章评论
的
123