sql server数据库输入汉字时为啥变成问号

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sql server数据库输入汉字时为啥变成问号相关的知识,希望对你有一定的参考价值。

参考技术A 属性改为nvchar 如果是代码的话,在字符串前面加"N” 参考技术B 直接在数据库里面输入还是在页面输入了保存进去的?建议使用utf-8编码
页面和windows的编码也要注意下
参考技术C 因为不支持汉字追问

不会吧! 我设置的数据类型都是vchar,和ntext吖 求帮助!!!

追答

vchar(40)类型 你运行时成功了吗
成功了才能再输入数据

pl/sql粘贴进去的汉字全是问号

在查询的时候是汉字,我粘贴其他脚本到PL/SQL时,显示的全是“???????????”,在别人电脑上用相同的文本,显示正常,不知道是什么原因,重新安装了pl/sql还是不行,请大家帮忙,谢谢。
向高手请教了,原来切换下输入法到中文,我再粘贴就可以了,唉,PL/SQL还有这“功能”你真是太牛X啦。

Oracle 字符集的问题啦。

(1)查看服务器端字符集
通过客户端或服务器端的sql*plus登录oracle的一个合法用户,执行下列
sql语句:

sql > select * from v$nls_parameters
parameter value
nls_language american
nls_territory america
…. ….
nls_characterset us7ascii
nls_sort binary
nls_nchar_characterset us7ascii

从上述列表信息中可看出服务器端oracle数据库的字符集为"us7ascii"。

(2)按照服务器端字符集对客户端进行配置
配置方法有两种:
安装oracle的客户端软件时指定
在安装oracle的客户端产品软件时,选择与oracle服务端一致的字符集(本例为us7ascii)即可。

修改注册信息的方法
根据oracle 客户端所选sql*net 的版本分为下列两种情况:

a. 客户端为 sql*net 2.0 以下版本

进入windows的系统目录,编辑oracle.ini文件,用us7ascii替换原字符
集,重新启动计算机,设置生效。

b. 客户端为 sql*net 2.0 以上版本

在windows下 运 行regedit,第一步选hkey_local_machine,第二步选择software, 第三步选择 oracle, 第四步选择 nls_lang, 键 入 与服 务 器端 相 同 的 字 符集(本例为:american_american.us7ascii)。

2.2 强制加载数据字符集与服务器端字符集一致

假设要加载数据从原oracle数据库卸出时的字符集为us7ascii,当前oracle服务器字符集为we8iso8859p1。

下面提供三种解决方法:
(1) 服务器端重新安装oracle
在重新安装oracle 时选择与原卸出数据一致的字符集(本例为us7ascii)。

加载原卸出的数据。

这种情况仅仅使用于空库和具有同一种字符集的数据。

(2)强行修改服务器端oracle当前字符集
在用imp命令加载数据前,先在客户端用sql*plus登录system dba用户,执行下列sql语句进行当前oracle数据库字符集修改:

sql > create database character set us7ascii
* create database character set us7ascii
error at line 1:
ora-01031: insufficient privileges

你会发现语句执行过程中,出现上述错误提示信息,此时不用理会,实际上oracle数据库的字符集已被强行修改为us7ascii,接着用imp命令装载数据。等数据装载完成以后,shutdown 数据库,再startup 数据库,用合法用户登录oracle数据库,在sql>命令提示符下,运行select * from v$nls_parameters,可以看到oracle数据库字符集已复原,这时再查看有汉字字符数据的表时,汉字已能被正确显示。

(3)利用数据格式转储,避开字符集限制
这种方法主要用于加载外来oracle数据库的不同字符集数据。其方法如下:

先将数据加载到具有相同字符集的服务器上,然后用转换工具卸出为foxbase 格式或access格式数据库,再用转换工具转入到不同字符集的oracle数据库中,这样就避免了oracle字符集的困扰。目前数据库格式转换的工具很多,象power builder5.0以上版本提供的pipeline,microsoft access数据库提供的数据导入/导出功能等。转换方法参见有关资料说明。.

2.3匹配字符集替换汉字

对于1.3提到的情况,没有很好的办法,只能先把客户端与服务器端字符集匹配一致后,根据原输入汉字的特征码替换汉字字符部分。

以上为引用部分,下面为我的一些具体操作后的结果。
目前在安装新的oracle 9.2.0.1时,估计是同事按照默认字符集进行了安装,导致与旧的数据库字符集不符,可我修改完注册表中所有关于字符集的相关键值后却仍然是乱码,在 sql*plus中用“select * from v$nls_parameters”查询出来的结果是NLS_CHARACTERSET的值仍为ZHS16GBK。经过网上检索,找到了一些解决办法,并最终得到解决。上面引用的部分是其中写得比较全面的。
具体的解决过程:
1、上述引用部分中“三种解决办法”第二种办法,初步测试无效,不知是不是数据库版本变了的缘故?没有时间仔细钻研了。
2、根据网上得到的另外一个解决办法:
1)、用SYSTEM登录数据库。
2)、执行 UPDATE SYS.PROPS$ SET VALUE$=\'WE8ISO8859P1\' WHERE NAME LIKE \'NLS_CHAR%\'; 语句。
3)、修改注册表,NLS_LANG的值为AMERICAN_AMERICA.WE8ISO8859P1
4)、重新启动数据库。
经测试,如果用system登录,那么第二条语句会因为权限问题无法执行。
3、根据无意中看到的一条语句,这个问题得到完美解决。即登录时用“/as sysdba”作为用户名登录(注意,该方法只能在数据库的服务端使用)。只需在sql*plus登录界面中的用户名那栏里填入即可或者是用其它用户正常登录,然后再输入语句“conn /as sysdba”也可。登录完成后再执行UPDATE SYS.PROPS$ SET VALUE$=\'WE8ISO8859P1\' WHERE NAME LIKE \'NLS_CHAR%\'; 导入数据,嘿嘿,搞定了,乱码终于消失了。不过,美中不足的是用oracle自带的管理工具查询数据表时仍然是乱码,估计是客户端的配置文件还有什么地方需要改动,不过,对我来说影响不大,程序执行后数据显示正常。
对了,补充一下,引用部分中“三种解决办法”第二种办法报错也是权限错误,不知道用"/as sysdba"登录能否修改成功,懒得试了。有兴趣的朋友可以试试!呵呵
参考技术A 设置系统环境变量即可 参考技术B 字符编码集的问题 参考技术C 字符集的问题,我以前遇到过这样的问题,但是我重装系统了 参考技术D 应该是编码问题

以上是关于sql server数据库输入汉字时为啥变成问号的主要内容,如果未能解决你的问题,请参考以下文章

在数据库表里输入汉字后变成问号????这是为啥??

为啥用visual studio2012编程时输入汉字显示为问号

SQL server 2005 为何插入汉字显示问号,修改也修改不了,为啥啊?求解

PHP执行SQL并将返回数据显示到网页上为啥汉字会变成问号

从程序向SQL数据库输入汉字,但是都变成了问号,求解决方案!

为啥navicat导入excel表之后汉字变成了问号?