linux乱码和数据库乱码的问题简单排查(r2笔记83天)

在本地的虚拟机环境一直凑合着用英文,今天想看看中文的东西都显示乱码,下定决心要把问题解决了。 如果直接打印文本内容,通过putty也会显示乱码。 [ora11g@rac1 ~]$ cat aa.sh δ? ε??ο?θ?ζ―δ?δ??ζ?θ― [ora11g@rac1 ~]$

这个时候很可能是putty的编码转换的问题,通过查看putty的设置,如上,可以看到应该选为utf-8。 选为UTF-8以后,重新打印,就没有问题了。

[ora11g@rac1 ~]$ cat  aa.sh
你好,这是一个测试

第一个问题解决了,第二个问题又来了,来看看数据库层面的乱码问题。

[ora11g@rac1 ~]$  sqlplus n1/n1
SQL> select *from test;
        ID NAME
---------- -----------------------------
         1  ??????

这个时候看看环境变量NLS_LANG的设置,如果为空,很可能会出问题。 [ora11g@rac1 ~]$ echo $NLS_LANG

[ora11g@rac1 ~]$

简单设置一下,这个最好和数据库层面的字符集要一致。 [ora11g@rac1 ~]$ echo $NLS_LANG american_america.AL32UTF8 再来查看一下,就没有问题了。

SQL> select *from test;

ID NAME ---------- ----------------------------- 1 突破玩法界限 当然了,我的这个问题刚好数据库层面是完全支持的,这样就省去了很多额外的工作,如果数据库层面的字符集不支持,那很可能就得重建库来改变字符集了。

select *from nls_database_parameters SQL> /

PARAMETER VALUE ------------------------------ ---------------------------------------- NLS_LANGUAGE AMERICAN NLS_TERRITORY AMERICA NLS_CURRENCY $ NLS_ISO_CURRENCY AMERICA NLS_NUMERIC_CHARACTERS ., NLS_CHARACTERSET AL32UTF8 NLS_CALENDAR GREGORIAN NLS_DATE_FORMAT DD-MON-RR NLS_DATE_LANGUAGE AMERICAN NLS_SORT BINARY NLS_TIME_FORMAT HH.MI.SSXFF AM NLS_TIMESTAMP_FORMAT DD-MON-RR HH.MI.SSXFF AM NLS_TIME_TZ_FORMAT HH.MI.SSXFF AM TZR NLS_TIMESTAMP_TZ_FORMAT DD-MON-RR HH.MI.SSXFF AM TZR NLS_DUAL_CURRENCY $ NLS_COMP BINARY NLS_LENGTH_SEMANTICS BYTE NLS_NCHAR_CONV_EXCP FALSE NLS_NCHAR_CHARACTERSET AL16UTF16 NLS_RDBMS_VERSION 11.2.0.3.0

另外系统层面的乱码,网上查看了一下,有些人建议修改/etc/sysconfig/i18n的设置。 [ora11g@rac1 ~]$ cat /etc/sysconfig/i18* LANG="en_US.UTF-8" SYSFONT="latarcyrheb-sun16" 如果修改为中文的,一定要注意设置的值,在我本地做测试,是不需要修改的,本身就支持,我修改的时候,竟然改错了,结果重新登录及报了一大堆的错误,如下: [ora11g@rac1 caipiao]$ su - ora11g Password: -bash: warning: setlocale: LC_CTYPE: cannot change locale (zn_CN.UTF-8): No such file or directory -bash: warning: setlocale: LC_COLLATE: cannot change locale (zn_CN.UTF-8): No such file or directory -bash: warning: setlocale: LC_MESSAGES: cannot change locale (zn_CN.UTF-8): No such file or directory -bash: warning: setlocale: LC_NUMERIC: cannot change locale (zn_CN.UTF-8): No such file or directory -bash: warning: setlocale: LC_TIME: cannot change locale (zn_CN.UTF-8): No such file or directory 如果修改,应该改为zh_CN,算是一个低级错误。

原文发布于微信公众号 - 杨建荣的学习笔记(jianrong-notes)

原文发表时间:2014-09-02

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏数据库新发现

字符集问题的初步探讨(五)

http://www.eygle.com/special/NLS_CHARACTER_SET_05.htm

21430
来自专栏乐沙弥的世界

PL/SQL-->UTL_FILE包的使用介绍

    在PL/SQL中,UTL_FILE包提供了文本文件输入和输出互功能。也就是说我们可以通过该包实现从操作系统级别来实现文件读取输入或者是写入到操作系统文件...

10110
来自专栏闻道于事

PL/SQL 编程(二)游标、存储过程、函数

游标--数据的缓存区 游标:类似集合,可以让用户像操作数组一样操作查询出来的数据集,实质上,它提供了一种从集合性质的结果中提取单条记录的手段。 可以将游标形象的...

55660
来自专栏杨建荣的学习笔记

原来Oracle也不喜欢“蜀黍"(r6笔记第54天)

今天在部署一个脚本的时候,碰到了一个奇怪的问题,脚本运行过程中报了一个ora错误 ORA-01756: quoted string not properly t...

28850
来自专栏数据库新发现

字符集问题的初步探讨(七)----关于字符集更改的内部操作

原文链接: http://www.eygle.com/special/NLS_CHARACTER_SET_07.htm 前面我们提到,通过修改props$...

11220
来自专栏数据库新发现

字符集问题的初步探讨(二)

原文发表于itpub技术丛书《Oracle数据库DBA专题技术精粹》,未经许可,严禁转载本文.

13820
来自专栏程序猿

Oracle_12C的新特性

这里我们来领略下Tom眼中的12个特性增强: ? #1 Even better PL/SQL from SQL, 直接在SQL中嵌入PL/SQL对象并运行,猜测...

31490
来自专栏杨建荣的学习笔记

关于exp/imp的总结学习(r4笔记第26天)

关于exp/imp,是很常用的数据导出导入工具,在10g开始推出的数据泵datapump相当于是exp/imp的补充和升级版本。在后续章节再做一个总结。 exp...

31170
来自专栏乐沙弥的世界

检查及设置合理的undo表空间

      UNDO是用于实现并发控制以及构建一致性读,也就是在数据变更之前产生前镜像,以保证用户能够回滚或撤销对数据库所作的修改。是Oracle数据库完整性的...

11420
来自专栏数据和云

触类旁通:那些关于 TBL$OR$IDX$PART$NUM 的诡异案例和知识

你是否留意过数据库中有一个奇怪的函数 TBL$OR$IDX$PART$NUM ,你是否留意过很多场景下都出现过它的身影?

14940

扫码关注云+社区

领取腾讯云代金券