sybase客户端显示乱码问题:服务器端字符集为cp850 客户端也为cp850
安装字符集cp936
运行命令(CMD命令): charset
-Usa -Ppassword binarysrt cp936
-- sybase执行脚本
use master
go
select id,name from syscharsets
go
exec sp_configure "default char"
go
exec sp_configure "default char",171
go
你试试!
数据库服务器字符集select from nls_database_parameters,其来源于props$,是表示数据库的字符集。
客户端字符集环境select from nls_instance_parameters,其来源于v$parameter,
表示客户端的字符集的设置,可能是参数文件,环境变量或者是注册表
会话字符集环境select from nls_session_parameters,其来源于v$nls_parameters,表示会话自己的设置,可能是会话的环境变量或者是alter session完成,如果会话没有特殊的设置,将与nls_instance_parameters一致。
客户端的字符集要求与服务器一致,才能正确显示数据库的非Ascii字符。如果多个设置存在的时候,alter session>环境变量>注册表>参数文件
字符集要求一致,但是语言设置却可以不同,语言设置建议用英文。如字符集是zhs16gbk,则nls_lang可以是American_Americazhs16gbk。
涉及三方面的字符集,
1 oracel server端的字符集;
2 oracle client端的字符集;
3 dmp文件的字符集。
在做数据导入的时候,需要这三个字符集都一致才能正确导入。
21 查询oracle server端的字符集
有很多种方法可以查出oracle server端的字符集,比较直观的查询方法是以下这种:
SQL> select userenv('language') from dual;
USERENV('LANGUAGE')
SIMPLIFIED CHINESE_CHINAZHS16GBK
SQL>select userenv(‘language’) from dual;
AMERICAN _ AMERICA ZHS16GBK
1。select from v$nls_parameters
查询nls的参数,获得数据库服务器端的字符编码
NLS_LANGUAGE
NLS_CHARACTERSET
2。修改本地环境变量,设置
NLS_LANG = SIMPLIFIED CHINESEZHS16GBK //这个是我们的数据库字符编码
NLS_LANG格式:
NLS_LANG = language_territorycharset
有三个组成部分(语言、地域和字符集),每个成分控制了NLS子集的特性。其中:language 指定服务器消息的语言。
territory 指定服务器的日期和数字格式。
charset 指定字符集
需要保证要设置客户端字符集与服务器端字符集一致
客户端连接Linux服务器中文显示乱码,如下图所示:
字符乱码问题 :如果服务器本身支持中文,只是客户端显示乱码,通常就是
客户端字符集与服务器字符集不一致造成的。把客户端字符集改成服务器字符集就可以解决的。但是像 SSHSecureShellClient-329exe 客户端没有设置字符集的地方,就需要把字符集改为zh_CNGB18030才能正确显示中文:
export LC_CTYPE=zh_CNGB18030
export LC_ALL=zh_CNGB18030
export LANG=zh_CNGB18030
设置完就解决了客户端连接Linux系统中文显示乱码的问题。
注:每次使用客户端连接Linux服务器时,都需要手动改一下字符集。
应该是错误输入了全角字符,输入半角字符就行了。
错误信息ORA-00911: invalid character说明了在执行的SQL语句中出现了无效字符,所在SQL语句无法通过语法分析过程导致了错误结果。
可能出现的原因有:错误地输入了全角字符,比如输入了全角逗号。
如果使用C++、Java、C#等编程时,总会习惯在语句最后加分号,而这个符号在SQL中是无效字符。
实际语句和列类型不匹配,比如将数值列赋值为字符串。
与display函数不同,display_cursor显示的为真实的执行计划。
对于format参数,使用与display函数的各个值,同样适用于display_cursor函数。
当statistics_level为all或使用gather_plan_statistics提示可以获得执行时的统计信息。
根据真实与预估的统计信息可以初步判断SQL效率低下的原因,如统计信息的准确性、主要的开销位于那些步骤等。
看你的sql语句最后是否有分号,有的话去掉就行 看你Oracle服务器端字符集是否和Oracle客户端字符集匹配。
查询oracle server端的字符集:SQL>select userenv(‘language’) from dual。
查询oracle client端的字符集。在windows平台下,就是注册表里面相应OracleHome的NLS_LANG。
还可以在dos窗口里面自己设置,比如: set nls_lang=AMERICAN_AMERICAZHS16GBK。
Oracle数据库字符集最有用的参数是NLS_LANG参数,格式如下: NLS_LANG = language_territorycharset
anguage:服务器消息的语言, 是中文还是英文
Territory: 服务器的日期和数字格式,
Charset: 指定字符集。
登录以sysdba登录,查看视图select from v$nls_parameters,可以知道具体的字符集参数,
正常的应该是
1NLS_LANGUAGE=SIMPLIFIED CHINESE
2NLS_TERRITORY=CHINA
3NLS_CHARACTERSET=ZHS16GBK
然后有问题就去修改参数文件里面的参数,最好做个备份哦!
因为改字符集有风险。
客户端设置(linux)
$NLS_LANG=“simplified chinese”_chinazhs16gbk
$export NLS_LANG
数据库服务器字符集
select from nls_database_parameters
是表示数据库的字符集,或者v$nls_parameters
客户端字符集环境
select from nls_instance_parameters
或者v$parameter,表示客户端的字符集的设置,可能是参数文件,环境变量或者是注册表
会话字符集环境
select from nls_session_parameters
v$nls_parameters,表示会话自己的设置,可能是会话的环境变量或者是alter session完成,如果会话没有特殊的设置,将与nls_instance_parameters一致。
以上都没问题 就会OK了,
(仅供参考,若有雷同纯属巧合)
1、首先我们打开电脑桌面,同时按windows徽标键和R键,在弹出来的窗口里输入,regedit,点击OK按钮。
2、打开后进入注册表界面。
3、打开后找到HKEY_LOCAL_MACHINE下的SOFTWARESOFTWARE下有Oracle选项,自己查找即可找到。
4、oracle下有好几个目录,可以都点点,因为目录名字可能不一样,不能肯定的说就是跟我的截图一样,可以明确的是,我们要找的注册项就是NLS_LANG。
5、找到后双击进行编辑,将nls_lang=SIMPLIFIED CHINESE_CHINAZHS16GBK修改成其他字符集,编辑后保存即可。
0条评论