文章目录
现象
一般我们都用ZHS16GBK。
服务端:
select * from nls_database_parameters;
...
NLS_CHARACTERSET ZHS16GBK
...
顾客端:NLS_LANG=SIMPLIFIEDCHINESE_CHINA.ZHS16GBK
然而某个顾客的数据库为WE8ISO8859P1
我们的顾客端程序界面显示乱码:???
剖析
顾客端更改NLS_LANG=american_america.WE8ISO8859P1
顾客端程序界面显示继续乱码:操操操…
用TOAD界面在表中输入英文linux 修改中文字符集,输入法中是正常字符,写入数据库变乱码。
查了一下,有文章劝服务端字符集若果不支持英文linux 修改中文字符集,则一定乱码:
并且他的系统是Linux而且是SQLPlus,不是自己开发的顾客端程序。
参考:《Oracle字符集的简单图解,英文乱码解决》
问了顾客,数据库字符集不能改,也不给我们新建数据库。。。
理论上Oracle储存的内容是字节,即便是英文被拆开2个字节存入Varchar2,也可以取出后组合成英文。
又查了下资料,都劝说务端字符集应当和顾客端显示无关。
主要是导出导入可能有字符集转换的问题。
解决
后来用PLSQL程序试了一下重新执行导出数据脚本,PLSQL上面英文显示正常了。。。再看顾客端程序显示也正常了???
此时Oracle顾客端和服务端都是WEWE88ISOISO88598859PP1。
再用TOAD试,仍然乱码,呵呵哒。
TOAD如今似乎支持多个数据库linux系统下载官网红旗linux操作系统,
但当初而且ToolofOracleAdministrationandDevelopmen…
咋能这样呢。
推论
顾客端和服务器都为单字节字符集,操作系统支持英文显示。
应用程序是可以显示英文的。
不过为了便捷,我们最好还是把数据库建成英文字符集,或英文字符集的超集。