oracle odbc 怎么设置能 支持中文
为舟山等地区用户提供了全套网页设计制作服务,及舟山网站建设行业解决方案。主营业务为成都网站设计、成都网站制作、外贸网站建设、舟山网站设计,以传统方式定制建设网站,并提供域名空间备案等一条龙服务,秉承以专业、用心的态度为用户提供真诚的服务。我们深信只要达到每一位用户的要求,就会得到认可,从而选择与我们长期合作。这样,我们也可以走得更远!
: 你的数据库编码字符集设置的不对,中文请使用gbk、gb3212的字符集,oracle默认好像是unicode,unicode是不支持中文的
在Redhat上安装Oracle 10g没有设定字符集,采用的是操作系统默认字符集:WE8ISO8859P1,将字符集修改为:ZHS16GBK。由于过程不可逆,首先需要备份数据库。
1.数据库全备
2.查询当前字符集
SQL select * from nls_database_parameters where parameter='NLS_CHARACTERSET';
PARAMETER VALUE
---------------------------------------- ----------------------------------------
NLS_CHARACTERSET WE8ISO8859P1
3.关闭数据库
SQL shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
4.启动数据库到mount状态
SQL startup mount
ORACLE instance started.
Total System Global Area 205520896 bytes
Fixed Size 1266608 bytes
Variable Size 100666448 bytes
Database Buffers 100663296 bytes
Redo Buffers 2924544 bytes
Database mounted.
5.限制session
SQL alter system enable restricted session;
System altered.
6.查询相关参数并修改
SQL show parameter job_queue_processes;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
job_queue_processes integer 10
SQL show parameter aq_tm_processes;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
aq_tm_processes integer 0
SQL alter system set job_queue_processes=0;
System altered.
7.打开数据库
SQL alter database open;
Database altered.
8.修改字符集
SQL alter database character set ZHS16GBK;
alter database character set ZHS16GBK
*
ERROR at line 1:
ORA-12712: new character set must be a superset of old character set
出现错误提示,新字符集必须是老字符集的超集,也就原来字符集是新字符集的子集,可以再Oracle官方文档上查询字符集包含关系。下面使用Oracle内部命令internal_use,跳过超集检查,生产环境不建议使用此方法。
SQL alter database character set internal_use ZHS16GBK;
Database altered.
9.查询当前字符集
SQL select * from nls_database_parameters where parameter='NLS_CHARACTERSET';
PARAMETER VALUE
---------------------------------------- ----------------------------------------
NLS_CHARACTERSET ZHS16GBK
10.关闭数据库
SQL shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
11.启动数据库到mount状态
SQL startup mount
ORACLE instance started.
Total System Global Area 205520896 bytes
Fixed Size 1266608 bytes
Variable Size 100666448 bytes
Database Buffers 100663296 bytes
Redo Buffers 2924544 bytes
Database mounted.
12.将相关参数改回原来值
SQL alter system set job_queue_processes=10;
System altered.
13.打开数据库
SQL alter database open;
Database altered.
要么是你建库时,选择的字符集不支持中文,建议选择AL16UTF16、AL32UTF8等unicode系列的字符集,支持多语言。
要么是你插入数据的字符集,与数据库的字符集不一致;或者客户端与服务端的字符集不一致。
已经建好的数据库可以用以下命令修改字符集:
ALTER DATABASE CHARACTER SET INTERNAL_USE AL32UTF8
当然,前提是数据库里存进去的数据没有乱码,且字段宽度能够容纳转码后的字符串。
怎样让Oracle支持中文
需要修改字符集。
Oracle修改服务器端字符集:
SQLSHUTDOWN IMMEDIATE;
SQLSTARTUP MOUNT;
SQLALTER SYSTEM ENABLE RESTRICTED SESSION;
SQLALTER SYSTEM SET JOB_QUEUE_PROCESSES=0;
SQLALTER SYSTEM SET AQ_TM_PROCESSES=0;
SQLALTER DATABASE OPEN;
SQLALTER DATABASE CHARACTER SET ZHS16GBK;
什么脚本不能执行呀,发一个出来看一下。
可能是字符集的原因,我的是这样:
select userenv('language') from dual;--SIMPLIFIED CHINESE_CHINA.ZHS16GBK
解决方法:
我的电脑---右击---属性---高级---环境变量---系统变量---新建
变量名:NLS_LANG
变量值:SIMPLIFIED CHINESE_CHINA.ZHS16GBK,确定后再试试,OK。