centos修改默认字符编码为GBK(服务器端java GBK字符乱码)

本文详细介绍了如何查看和修改Linux系统的默认编码,包括使用命令行工具进行操作的步骤和注意事项。

1、查看系统默认编码

命令:echo $LANG

en_US.UTF-8

命令 : locale

LANG=en_US.UTF-8

LC_CTYPE="en_US.UTF-8"

LC_NUMERIC="en_US.UTF-8"

LC_TIME="en_US.UTF-8"

LC_COLLATE="en_US.UTF-8"

LC_MONETARY="en_US.UTF-8"

LC_MESSAGES="en_US.UTF-8"

LC_PAPER="en_US.UTF-8"

LC_NAME="en_US.UTF-8"

LC_ADDRESS="en_US.UTF-8"

LC_TELEPHONE="en_US.UTF-8"

LC_MEASUREMENT="en_US.UTF-8"

LC_IDENTIFICATION="en_US.UTF-8"

LC_ALL=

2、修改系统默认编码

①:修改il8n文件

命令:vim /etc/sysconfig/i18n,修改为

#LANG="en_US.UTF-8"

 LANG="zh_CN.gbk"

 ②:修改profile文件

命令:vim /etc/profile.追加内容

export LC_ALL="zh_CN.GBK"

export LANG="zh_CN.GBK"

 

③:立即生效配置

命令:source /etc/profile

 

 

 

<think> 我们面对的问题是:在Linux系统中,设置NLS_LANG为ZHS16GBK,数据库字符集也是zhs16gbk,但使用sqlplus时出现中文乱码。我们需要解决这个乱码问题。 根据引用内容,我们知道字符集设置需要一致,并且NLS_LANG的设置格式为:语言_地区.字符集。例如:American_America.zhs16gbk。 另外,引用中提到了多个字符环境:数据库服务器字符集、客户端字符环境(NLS_INSTANCE_PARAMETERS)、会话字符环境(NLS_SESSION_PARAMETERS)。我们需要确保这些设置正确。 可能的解决方案步骤: 1. 确认数据库服务器的字符集确实是ZHS16GBK。 可以通过以下SQL查询: ```sql SELECT * FROM nls_database_parameters WHERE parameter='NLS_CHARACTERSET'; ``` 应该返回ZHS16GBK。 2. 在Linux客户端设置NLS_LANG环境变量。 在用户的shell配置文件(如.bash_profile或.bashrc)中设置: ```bash export NLS_LANG="American_America.ZHS16GBK" ``` 注意:这里语言和地区可以根据需要设置,但字符集部分必须为ZHS16GBK。 3. 确保Linux系统的终端(terminal)支持中文字符集,并且终端的编码设置为GBK(因为ZHS16GBKGBK的超集)。如果终端不支持GBK,则可能显示乱码。 4. 如果使用sqlplus spool导出文件,还需要确保导出的文件编码与系统环境一致。例如,如果系统环境是UTF-8,而导出的文件是GBK,那么用UTF-8的文本编辑器打开就会乱码。此时可以用支持转换编码的编辑器打开,或者将导出文件的编码转换为当前环境编码。 5. 检查会话字符集设置: 在sqlplus中执行: ```sql SELECT * FROM nls_session_parameters WHERE parameter='NLS_LANGUAGE' OR parameter='NLS_TERRITORY' OR parameter='NLS_CHARACTERSET'; ``` 确保NLS_CHARACTERSET是ZHS16GBK。 6. 如果以上设置都正确,但仍有乱码,可能是终端本身不支持中文字符集。可以尝试安装中文字体或切换终端。 7. 另外,如果是在Xmanager等远程工具中使用,确保远程工具的编码设置与NLS_LANG一致。 8. 如果问题仍然存在,可以尝试在sqlplus中临时修改会话的NLS_LANG(虽然一般不推荐,因为每次会话都要设置): ```sql ALTER SESSION SET NLS_LANGUAGE='AMERICAN'; ALTER SESSION SET NLS_TERRITORY='AMERICA'; ALTER SESSION SET NLS_CHARACTERSET='ZHS16GBK'; ``` 注意:如果数据库中有数据,修改数据库字符集是非常危险的操作(如引用2所述),所以不要轻易修改数据库字符集,除非确认当前设置错误且没有数据或已备份。 根据引用2,我们还可以查询dmp文件的字符集,但这里我们并没有涉及到dmp文件,所以暂时不需要。 因此,重点在于客户端环境变量NLS_LANG的设置和终端编码的设置。 总结解决步骤: 步骤1:确认数据库字符集为ZHS16GBK。 步骤2:在客户端设置环境变量NLS_LANG=American_America.ZHS16GBK(并source配置文件)。 步骤3:检查终端编码设置,确保终端支持并设置为GBK(或ZHS16GBK)编码。 步骤4:检查远程工具(如Xmanager)的编码设置。 步骤5:在sqlplus中检查会话字符集设置。 如果按照以上步骤设置后,应该可以解决乱码问题。 下面,我将生成相关问题。 </think> ### 解决 SQL*Plus 中文乱码问题的方法 在 Linux 系统中,当 NLS_LANG 设置为 ZHS16GBK 且数据库字符集为 zhs16gbk 时出现 SQL*Plus 乱码问题,通常是由于**客户端环境配置不一致**导致的。以下是详细的解决方案: #### 1. **确认并统一字符集设置** - **检查数据库字符集**: ```sql SELECT * FROM nls_database_parameters WHERE parameter IN ('NLS_CHARACTERSET', 'NLS_LANGUAGE'); ``` 确保返回值包含 `ZHS16GBK`(如图): ``` PARAMETER VALUE ---------------- ---------- NLS_CHARACTERSET ZHS16GBK NLS_LANGUAGE AMERICAN ``` - **设置客户端 NLS_LANG**: 在 Linux 客户端的 `~/.bash_profile` 或 `~/.bashrc` 中明确指定: ```bash export NLS_LANG="AMERICAN_AMERICA.ZHS16GBK" ``` 执行 `source ~/.bashrc` 生效。 *注:格式必须为 `语言_地区.字符集`,且字符集与数据库一致*[^2]。 #### 2. **配置终端环境支持 GBK** - **终端编码设置**: ```bash # 临时生效(当前会话) export LANG=zh_CN.gbk # 永久生效(写入配置文件) echo "export LANG=zh_CN.gbk" >> ~/.bashrc ``` - **安装中文字体支持**: ```bash # CentOS/RedHat yum install -y fonts-chinese # Ubuntu/Debian apt-get install -y fonts-wqy-zenhei ``` #### 3. **验证并修复会话级设置** - **在 SQL*Plus 中检查当前会话**: ```sql SELECT * FROM nls_session_parameters WHERE parameter IN ('NLS_LANGUAGE', 'NLS_TERRITORY', 'NLS_CHARACTERSET'); ``` 若返回非 ZHS16GBK,强制修正: ```sql ALTER SESSION SET NLS_LANGUAGE='AMERICAN'; ALTER SESSION SET NLS_TERRITORY='AMERICA'; ALTER SESSION SET NLS_CHARACTERSET='ZHS16GBK'; ``` #### 4. **特殊场景处理(如 SPOOL 导出)** - **导出文件时指定编码**: ```sql -- 在 SQL*Plus 中设置导出编码 SET NLS_LANG=AMERICAN_AMERICA.ZHS16GBK SPOOL /path/to/output.txt SELECT ... FROM ...; SPOOL OFF ``` - **用 `iconv` 转换文件编码**(若其他工具打开乱码): ```bash iconv -f GBK -t UTF-8 input.txt > output_utf8.txt ``` ### 🔍 关键原因总结 | 环节 | 要求 | 检查命令 | |---------------|-----------------------|-----------------------------| | **数据库** | 字符集=ZHS16GBK | `SELECT * FROM nls_database_parameters;` | | **客户端** | NLS_LANG 包含 ZHS16GBK | `echo $NLS_LANG` | | **终端** | LANG 支持 GBK | `locale` | | **会话** | 与客户端一致 | `SELECT * FROM nls_session_parameters;` | > ⚠️ 注意:若数据库中已存在数据,修改字符集需备份数据,否则可能导致永久性乱码[^2]。 通过以上步骤,99% 的 SQL*Plus 中文乱码问题可被解决。若问题仍存在,请检查 SSH 工具(如 Xshell)的编码设置是否为 GBK。 --- ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值