2 mawang1024 mawang1024 于 2016.03.09 09:33 提问

asp.net 向 Oracle 添加数据 中文乱码 10C

问题:asp.net 向oracle 插入中文乱码 oracle 字符集 AMERICAN_AMERICA.US7ASCII 而oracle的字符集是不可更改的。那么在程序如何处理?

2个回答

Marksinoberg
Marksinoberg   Ds   Rxr 2016.03.09 10:08

出现乱码的原因无非也就那么几个,要么代码的编码和数据库的不统一,要么从数据库获取数据的时候采取的编码出错,要么就是界面展示数据的时候出错了!不妨从这几个方面着手进行修改,希望对你有用图片说明

qq_32969313
qq_32969313   2016.03.09 16:28

搜到两个看起来靠谱的方法
1.
以上的大伙们不要乱发言好不好,根本不是你们说的那样,那只是字体问题,具体解决你可以到注册表的以下键目录下修改就可以:
Oracle-->home0-->nls_lang
将它的AMERICAN_AMERICA.US7ASCII
修改成SIMPLIFIED CHINESE_CHINA.ZHS16GBK
就行了,记得将软件重新启一下
一定行的,记的给我加分哦

2.==============================================================================

oracle8.05字符集US7ASCII-->Oracle8.17字符集ZHS16GBK字符集的数据exp,imp问题

查看oracle8.05历史数据字符集合参数

column VALUE format a20
select parameter,value from v$nls_parameters;
PARAMETER VALUE


NLS_LANGUAGE AMERICAN
NLS_TERRITORY AMERICA
NLS_CURRENCY $
NLS_ISO_CURRENCY AMERICA
NLS_NUMERIC_CHARACTERS .,
NLS_CALENDAR GREGORIAN
NLS_DATE_FORMAT DD-MON-YY
NLS_DATE_LANGUAGE AMERICAN
NLS_CHARACTERSET US7ASCII
NLS_SORT BINARY

NLS_NCHAR_CHARACTERSET US7ASCII

在softing上新建数据库oracle 8.05字符集均为us7ascii,us7ascii

例子: B3C2BFCBB8D5陈克刚 是标准的国家标准 如果去掉高位33423f4b3855

connect system/manager@rube;
select name,value$ from sys.props$;
NAME VALUE$


DICT.BASE 2
NLS_LANGUAGE AMERICAN
NLS_TERRITORY AMERICA
NLS_CURRENCY $
NLS_ISO_CURRENCY AMERICA
NLS_NUMERIC_CHARACTERS .,
NLS_CALENDAR GREGORIAN
NLS_DATE_FORMAT DD-MON-YY
NLS_DATE_LANGUAGE AMERICAN
NLS_CHARACTERSET US7ASCII
NLS_SORT BINARY
NLS_NCHAR_CHARACTERSET US7ASCII
NLS_RDBMS_VERSION 8.0.5.0.0
GLOBAL_DB_NAME RUBE.WORLD

EXPORT_VIEWS_VERSION 7

首先处理使US7ASCII能够支持中文,修改数据库客户端字符集

update sys.props$ set value$='WE8ISO8859P1' where name like 'NLS_CHARACTERSET';
update sys.props$ set value$='WE8ISO8859P1' where name like 'NLS_NCHAR_CHARACTERSET';
commit;

svrmgr30
connect internal/oracle@rube
shutdown imeediate
startup

这样在修改数据库客户端字符集为WE8ISO8859P1,数据库字符集us7acii插入汉字和显示汉字均正常

然后使用exp80导出oracle8.05下用户的表到文件user.dmp,查看oracle字符集和编码
31 =001F WE8ISO8859P1 查看user.dmp第2,3字节为 001F = 31

852 =0354 ZHS16GBK

select nls_charset_id('WE8ISO8859P1') from dual;

select nls_charset_name(31) from dual;

select nls_charset_id('US7ASCII') from dual;

select nls_charset_id('ZHS16GBK') from dual;

使用二进制工具修改文件user.dmp的第二,三字节为oracle817的字符集编码0354
在使用oracle817导入User.dmp文件导入以后,原来在oracle805(us7ascii)下显示的数据库
在oracle817(ZHS16GBK)显示和插入正常
能正确导入的原因:oracle805在配置客户端字符集合,能正常显示和插入汉字的情况下,exp
导出的汉字均为国家标准编码(可即区位码),在orcle817中只要将oracle805
Exp文件字符集WE8ISO8859P1的ID改为oracle817的字符集ZHS16GBK的ID,

在用oracle的imp工具导入既能正常导入.

以下是错误的修改

update sys.props$ set value$='US7ASCII' where name like 'NLS_CHARACTERSET';
update sys.props$ set value$='US7ASCII' where name like 'NLS_NCHAR_CHARACTERSET';
commit;
svrmgr30
connect internal/oracle@rube
shutdown imeediate
startup

在插入和显示汉字不正常,是因为WE8ISO8859P1是US7ASCII的超集,超集不能改为子集

update sys.props$ set value$='ZHS16CGB231280' where name like 'NLS_CHARACTERSET';
update sys.props$ set value$='ZHS16CGB231280' where name like 'NLS_NCHAR_CHARACTERSET';
commit;
svrmgr30
connect internal/oracle@rube
shutdown imeediate
startup

在插入和显示汉字不正常,是因为ZHS16CGB231280和US7ASCII是不同的集合,不能转换

没有环境,你测试下,看是否可用

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
oracle中插入数据出现乱码问题的解决
 思路: 注册表跟系统环境变量里的字符集统一。 1.在运行中输入regedit,打开注册表编辑器 2.HKEY_LOCAL_MACHINE->SOFTWARE->ORACLE->KEY_OraClient11g_home1 看见 NLS_LANG 将:SIMPLIFIED CHINESE_CHINA.ZHS16GBK 3.cmd --> set 发现 nls_lang
当从页面向数据库插入数据时,中文为乱码的解决方法:
当从页面向数据库插入数据时,如果插入的中文为乱码的解决方法:  1、如果数据在页面上已经是乱码了,就在页面中修改编码方式。  2、如果插入数据库前是好的,就修改连接数据库是的编码方式。  3、如果不是上面的问题,就修改数据库的编码方式。
jsp中向数据库中插入数据及中文乱码问题
首先附上最刚开始的代码,功能是向数据库中插入数据,数据库中的属性如下:   <% String action = request.getParameter("action"); //表单中提交过来的数据。 if(action != null && action.equals("submit")) { //如果进行提交,则进行数据插入 String title = reques
ASP.NET数据库添加记录练习
 update.aspx @ Page language="C#" Codebehind="update.aspx.cs" AutoEventWireup="false" Inherits="DotNetTest.database.update" %>DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >HTML>
往数据库添加数据后乱码
使用jdbc往数据库添加数据,没有io流读写的步骤的话,在控制台打印数据,确认获取的数据没有乱码的情况下,最后一个环节就是数据库本身的编码不是utf-8,一行代码完美解决 jdbc:mysql:///store?characterEncoding=UTF-8
c#向Oracle数据库中插入数据, 出现乱码问题, oracle11g(版本11.2)
数据库语言是:SIMPLIFIED CHINESE_CHINA.ZHS16GBK, 注册表machine->software->Oracle下的NLS_LANG键; 环境变量: nls_lang=SIMPLIFIED CHINESE_CHINA.ZHS16GBK; 与注册表相统一. Oracle SQL Developer中工具->首选项->环境->编码: GBK. 连接字符串:
plsqldeveloper、oracle数据库插入数据乱码的问题
plsqldeveloper 显示的sql语句没有乱码, insert into语句   执行到oracle数据库的时候乱码。 需要设置字符集环境变量: 解决方案一 oracle字符集无法存储中文字符。下面的语句查询oracle字符集。 select  userenv('language') from dual; 如果查询结果支持中文字符(比如gbk,utf-8),
asp.net oracle 中文乱码 解决方法
asp.net oracle 中文乱码 解决方法 不需要去修改oracle以及client的字符集,只需要在web.config中连接字符串上加上 Unicode=True 问题解决。 ;Unicode=True"/>  ;Unicode=True" providerName="System.Data.OracleClient"/> 原文链接:http://kms.leno
向Oracle表中的添加数据
一 INSERT语句 INSERT INTO table_name (column1,column2...) VALUES(value1,value2,...) 二 实例 1、向表中所有字段添加值 SQL> desc userinfo 名称是否为空?类型 -------------------------------------------------------------
java程序想mysql数据库插入数据乱码解决方法()
在eclipse  mysql数据库编码全调成utf-8的编码后还是乱码,怎么办? 解决办法   在jdbc连接url     jdbc:mysql://localhost:3306/mav?useUnicode=true&characterEncoding=UTF-8    ps:UTF-8只能这么写插入的数据才不会是乱码  例如utf-8 utf8   都是不行的    已验证。