Linux乱码和数据库乱码的问题简单排查

在本地的虚拟机环境一直凑合着用英文,今天想看看中文的东西都显示乱码,下定决心要把问题解决了。

  如果直接打印文本内容,通过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,算是一个低级错误。

最新内容请见作者的GitHub页:http://qaseven.github.io/

时间: 2024-09-12 01:40:06

Linux乱码和数据库乱码的问题简单排查的相关文章

Linux下sqlplus中文乱码问题的解决

错误现象: 在windows下用其他工具访问oracle,确认中文正常显示.在Linux下使用sqlplus查询数据表中文内容出现乱码. 分析及解决: 因为windows下正常,所以问题应出现在Linux客户端.用下列sql查询数据库字符集为"ZHS16GBK": SELECT * FROM nls_database_parameters t WHERE t.parameter = 'NLS_CHARACTERSET'; 设置环境变量NLS_LANG,问题解决. export NLS_

mysql 中文 linux-mysql在linux下的中文乱码问题

问题描述 mysql在linux下的中文乱码问题 我的一个网站分别部署在windows下/linux,使用myeclipse/tomcat/mysql, mysql和相应数据库及相应表编码都已经设置为utf-8,测试在两个系统下数据的crud都正常, 但是我有一段存储过程(数据库函数),会执行一些数据的拼凑,然后我再获取这些数据,在windows下面一切正常,但在linux下这些数据中的中文会变成乱码. 两个系统下部署的程序完全相同,mysql的设置也完全相同.实在找不到解决办法了,又不想用wi

thinkphp3查询mssql数据库乱码解决方法

 这篇文章主要介绍了thinkphp3查询mssql数据库乱码解决方法,需要的朋友可以参考下 thinkphp查询mssql数据库出现乱码的原因是ThinkPHP默认为UTF-8,而msmsql数据库是简体中文版,存储的是GB2312编码   解决方法:   1:在ThinkPHPLibCore 打开Db.class.php,在其最后面加上 2:在Db.class.php找到function select(),在$result = $this->query($sql);后面加一条 $result

解决Linux下U盘乱码的方法

  轻松解决Linux下U盘乱码的方法: 1.一般用这条命令: mount -o iocharset=utf8 /dev/sdb /tmp/fat 2.如若不行可试如下命令: mount /dev/sdb /mnt -t vfat -o codepage=936,iocharset=utf8 mount /dev/sdb /mnt -t vfat -o iocharset=utf8 mount /dev/sdb /mnt -t vfat -o codepage=936,iocharset=gb2

idea操作数据库乱码问题

问题描述 idea操作数据库乱码问题 在idea中的applicationContext.xml中配置了一个jdbcTemplate,url为jdbc:mysql://localhost:3306/tutor?characterEncoding=UTF-8,数据库的编码方式也是UTF-8的,但是想数据库中插入数据中文全部是乱码.同样的代码拿到eclipse中运行,就能将中文准确的插入而不会出现乱码. 解决方案 idea的中文乱码的解决 idea中文乱码在网上一搜,看到的解决方案是: 更改设置中a

php插入到mysql数据库中文乱码,数据库中的中文可以正常显示

问题描述 php插入到mysql数据库中文乱码,数据库中的中文可以正常显示 php网页中文数据插入到mysql数据库乱码,数据库中的中文数据可以在网页上正常显示. php文件开头有header("Content-Type: text/html; charset=utf-8"); 使用PHP MySQL UPDATE之前有 mysql_query("set names 'utf8'",$conn); php文件以utf-8格式编码,phpmyadmin中数据库和数据表

编码-php插入到mysql数据库中文乱码,数据库中的中文可以正常显示

问题描述 php插入到mysql数据库中文乱码,数据库中的中文可以正常显示 PHP获取HTML的POST内容到数据库,插入以后显示乱码,我数据库编码已经设置成UTF8了,然后插入之前我ECHO出来也不是乱码,但是到数据库里面就成乱码了,不知道为什么呢,问之前我已经搜索过了,说要先执行 mysql_query("SET NAMES 'uft8'",$link); 这样,我这样执行以后然后刷新还是一样 解决方案 http://www.111cn.net/phper/31/59059.htm

Linux服务器数据库(MySQL、ORACLE)简单的异地备份方案

Linux服务器MySQL数据库简单的异地备份方案 首先简单说下: 1.执行脚本导出数据库. mysqldump -h127.0.0.1 -P3306 -uroot -ppassword dbname > /bak/db/backup.sql 2.使用scp将导出的数据库文件传输到其他服务器上,一般进行异地备份,容灾. scp -P 195 /bak/db/backup.sql root@xxx.xxx.xxx.xxx:/bak 其中195为ssh端口号,如果是默认的22,可以省略 -P 22.

hive 乱码-在linux中,中文乱码问题

问题描述 在linux中,中文乱码问题 在hive中只要出现的中文字符,就会有乱码现象,编码格式我改了无数种了,可就是不能解决问题,该怎么办呀?? 解决方案 http://www.linuxidc.com/Linux/2013-04/83449.htm 解决方案二: http://www.ithao123.cn/content-956748.htmlhttp://blog.csdn.net/j3smile/article/details/19990343 解决方案三: hive用hadoop?你