当前位置:首页 » 操作系统 » 数据库af

数据库af

发布时间: 2022-10-24 05:51:44

linux怎么备份数据库

一、 使用mysql相关命令进行简单的本地备份

1 mysqllmp命令

mysqlmp 是采用SQL级别的备份机制,它将数据表导成 SQL 脚本文件,在不同的 MySQL 版本之间升级时相对比较合适,这也是最常用的备份方法。

使用 mysqlmp进行备份非常简单,如果要备份数据库” db_backup ”,使用命令:
#mysqlmp –u -p phpbb_db_backup > /usr/backups/mysql/db_backup2008-1-6.sql
还可以使用gzip命令对备份文件进行压缩
#mysqlmp db_backup | gzip > /usr/backups/mysql/ db_backup2008-1-6.sql.gz (备份后生成的sql不含建库语句!)
只备份一些频繁更新的数据库表:
## mysqlmp sample_db articles comments links > /usr/backups/mysql/sample_db.art_comm_lin.2008-1-6.sql
上面的命令会备份articles, comments, 和links 三个表。

恢复数据使用命令:
#mysql –u -p db_backup </usr/backups/mysql/ db_backup2008-1-6.sql
注意使用这个命令时必须保证数据库正在运行。

2 使用 SOURCE 语法

其实这不是标准的 SQL 语法,而是 mysql 客户端提供的功能,例如:
# SOURCE /tmp/db_name.sql;
这里需要指定文件的绝对路径,并且必须是 mysqld 运行用户(例如 nobody)有权限读取的文件。

3 mysqlhot备份

mysqlhot 只能用于备份 MyISAM,并且只能运行在 linux 和Unix 和 NetWare 系统上。mysqlhot 支持一次性拷贝多个数据库,同时还支持正则表达。以下是几个例子:
#mysqlhot -h=localhost -u=goodcjh -p=goodcjh db_name /tmp
(把数据库目录 db_name 拷贝到 /tmp 下)
注意,想要使用 mysqlhot,必须要有 SELECT、RELOAD(要执行 FLUSH TABLES) 权限,并且还必须要能够有读取 datadir/db_name 目录的权限。

还原数据库方法:

mysqlhot 备份出来的是整个数据库目录,使用时可以直接拷贝到 mysqld 指定的 目录 (在这里是 /usr/local/mysql/data/)目录下即可,同时要注意权限的问题,另外首先应当删除数据库旧副本如下例:

# /bin/rm -rf /mysql-backup/**//*old
关闭mysql 服务器、复制文件、查询启动mysql服务器的三个步骤:
# /etc/init.d/mysqld stop
Stopping MySQL: [ OK ]
# cp -af /mysql-backup/**//* /var/lib/mysql /
# /etc/init.d/mysqld start
Starting MySQL: [ OK ]
#chown -R nobody:nobody /usr/local/mysql/data/ (将 db_name 目录的属主改成 mysqld 运行用户)
二、使用网络备份

将MYSQL数据放在一台计算机上是不安全的,所以应当把数据备份到局域网中其他Linux计算机中。假设Mysql服务器IP地址是:192.168.1.3。局域网使用Linux的远程计算机IP地址是192.168.1.4;类似于windows的网络共享,UNIX(Linux)系统也有自己的网络共享,那就是NFS(网络文件系统),在linux客户端挂接(mount)NFS磁盘共享之前,必须先配置好NFS服务端。linux系统NFS服务端配置方法如下:

(1)修改 /etc/exports,增加共享目录
/export/home/sunky 192.168.1.4(rw)
/export/home/sunky1 *(rw)
/export/home/sunky2 linux-client(rw)

② 智慧城市数据储存常用的数据库有哪些

咨询记录 · 回答于2021-12-13

③ 怎么解决向数据库输入的问题

你呀,我发现你犯了个严重且还不容易察觉的错误!你是不是在运行时抛出NullPointerException空指针异常了呢?就是嘛,因为你在public void jbutton1()方法内有这几句代码:

JTextField bianhao1=new JTextField(10);
JTextField shuming1=new JTextField(10);
JTextField zuozhe1=new JTextField(10);
JTextField danwei1=new JTextField(10);
JTextField shijian1=new JTextField(10);

这几句代码的意思是分别创建了新的(注意是新创建的)JTextField局部变量,引用名分别为bianhao1,shuming1,zuozhe1,danwei1和shijian1。这样一来的话就与你在最前面声明的

JTextField bianhao1,shuming1,zuozhe1,danwei1,shijian1;

这句产生冲突了,既局部变量屏蔽了全局变量,以致你开头声明的全局变量bianhao1,shuming1,zuozhe1,danwei1和shijian1依旧指向空指针null!
像这么说你明白了没有(你初学的话看看书应该就明白的...)?

所以你应该将public void jbutton1()方法中引用名bianhao1,shuming1,zuozhe1,danwei1和shijian1前面的JTextField去掉,即改为:

bianhao1=new JTextField(10);
shuming1=new JTextField(10);
zuozhe1=new JTextField(10);
danwei1=new JTextField(10);
shijian1=new JTextField(10);

懂了吗?这样一来的话你在下面接收输入值时就对了!
总之希望能帮上你,还有不明白的地方欢迎提问!

④ 数据库还原失败

先去数据库建一个
与你要还原的数据库名字一样的数据库

然后还原的时候,左上角有个选项设置,把里面的覆盖原有数据库这一选项勾上,然后在还原

⑤ 数据库 关系模式 BC → D, C → AF, AB → CE 如何分解成BCNF

我们先来推断一下码;
c->af====>c->a,c->f
ab->ce===>ab->c,ab->e
这样我们得到:ab->a,ab->c,ab->f,ab->e
又因为
bc->d,ab->c
我们是不是能得到ab->d呢,答案是肯定的。所以呢ab作为码就可以了。
根据BCNF定义,可分为:
R1 {A,B,C,E}
R1 {A,B,D,F},如果不对,欢迎指正。

⑥ oracle sql 语句里 af_pub_getseq() 是什么意思,怎么用的

af_pub_getseq 看着应该是自定义的一个函数,获取序列。

你可以去数据库的函数中去看看,应该是你们自定义的函数

⑦ 常用的数据库有哪几种试着阐述每种数据库的特点和使用范围

关系数据库、非关系型数据库。

1、关系数据库

特点:数据集中控制;减少数据冗余等。

适用范围:对于结构化数据的处理更合适,如学生成绩、地址等,这样的数据一般情况下需要使用结构化的查询。

2、非关系数据库

特点:易扩展;大数据量,高性能;灵活的数据模型等。

使用范围:据模型比较简单;需要灵活性更强的IT系统;对数据库性能要求较高。

(7)数据库af扩展阅读:

非关系数据库的分类:

1、列存储数据库

这部分数据库通常是用来应对分布式存储的海量数据。键仍然存在,但是它们的特点是指向了多个列。这些列是由列家族来安排的。如:Cassandra, HBase, Riak。

2、文档型数据库

文档型数据库的灵感是来自于Lotus Notes办公软件的,而且它同第一种键值存储相类似。该类型的数据模型是版本化的文档,半结构化的文档以特定的格式存储,比如JSON。文档型数据库可 以看作是键值数据库的升级版,允许之间嵌套键值。而且文档型数据库比键值数据库的查询效率更高。如:CouchDB, MongoDb. 国内也有文档型数据库SequoiaDB,已经开源。

⑧ 如何查看和修改Oracle数据库服务器端的字符集

Oracle 字符集的查看和修改
一、什么是Oracle字符集
Oracle字符集是一个字节数据的解释的符号集合,有大小之分,有相互的包容关系。ORACLE 支持国家语言的体系结构允许你使用本地化语言来存储,处理,检索数据。它使数据库工具,错误消息,排序次序,日期,时间,货币,数字,和日历自动适应本地化语言和平台。

影响Oracle数据库字符集最重要的参数是NLS_LANG参数。
它的格式如下: NLS_LANG = language_territory.charset
它有三个组成部分(语言、地域和字符集),每个成分控制了NLS子集的特性。
其中:
Language: 指定服务器消息的语言, 影响提示信息是中文还是英文
Territory: 指定服务器的日期和数字格式,
Charset: 指定字符集。
如:AMERICAN _ AMERICA. ZHS16GBK
从NLS_LANG的组成我们可以看出,真正影响数据库字符集的其实是第三部分。
所以两个数据库之间的字符集只要第三部分一样就可以相互导入导出数据,前面影响的只是提示信息是中文还是英文。

二.字符集的相关知识:
2.1 字符集
实质就是按照一定的字符编码方案,对一组特定的符号,分别赋予不同数值编码的集合。Oracle数据库最早支持的编码方案是US7ASCII。
Oracle的字符集命名遵循以下命名规则:
<Language><bit size><encoding>
即: <语言><比特位数><编码>
比如: ZHS16GBK表示采用GBK编码格式、16位(两个字节)简体中文字符集

2.2 字符编码方案

2.2.1 单字节编码
(1)单字节7位字符集,可以定义128个字符,最常用的字符集为US7ASCII
(2)单字节8位字符集,可以定义256个字符,适合于欧洲大部分国家
例如:WE8ISO8859P1(西欧、8位、ISO标准8859P1编码)

2.2.2 多字节编码
(1)变长多字节编码
某些字符用一个字节表示,其它字符用两个或多个字符表示,变长多字节编码常用于对亚洲语言的支持, 例如日语、汉语、印地语等
例如:AL32UTF8(其中AL代表ALL,指适用于所有语言)、zhs16cgb231280
(2)定长多字节编码
每一个字符都使用固定长度字节的编码方案,目前oracle唯一支持的定长多字节编码是AF16UTF16,也是仅用于国家字符集
2.2.3 unicode编码
Unicode是一个涵盖了目前全世界使用的所有已知字符的单一编码方案,也就是说Unicode为每一个字符提供唯一的编码。UTF-16是unicode的16位编码方式,是一种定长多字节编码,用2个字节表示一个unicode字符,AF16UTF16是UTF-16编码字符集。
UTF-8是unicode的8位编码方式,是一种变长多字节编码,这种编码可以用1、2、3个字节表示一个unicode字符,AL32UTF8,UTF8、UTFE是UTF-8编码字符集

2.3 字符集超级
当一种字符集(字符集A)的编码数值包含所有另一种字符集(字符集B)的编码数值,并且两种字符集相同编码数值代表相同的字符时,则字符集A是字符集B的超级,或称字符集B是字符集A的子集。
Oracle8i和oracle9i官方文档资料中备有子集-超级对照表(subset-superset pairs),例如:WE8ISO8859P1是WE8MSWIN1252的子集。由于US7ASCII是最早的Oracle数据库编码格式,因此有许多字符集是US7ASCII的超集,例如WE8ISO8859P1、ZHS16CGB231280、ZHS16GBK都是US7ASCII的超集。

2.4 数据库字符集(oracle服务器端字符集)
数据库字符集在创建数据库时指定,在创建后通常不能更改。在创建数据库时,可以指定字符集(CHARACTER SET)和国家字符集(NATIONAL CHARACTER SET)。

2.4.1字符集
(1)用来存储CHAR, VARCHAR2, CLOB, LONG等类型数据
(2)用来标示诸如表名、列名以及PL/SQL变量等
(3)用来存储SQL和PL/SQL程序单元等

2.4.2国家字符集:
(1)用以存储NCHAR, NVARCHAR2, NCLOB等类型数据
(2)国家字符集实质上是为oracle选择的附加字符集,主要作用是为了增强oracle的字符处理能力,因为NCHAR数据类型可以提供对亚洲使用定长多字节编码的支持,而数据库字符集则不能。国家字符集在oracle9i中进行了重新定义,只能在unicode编码中的AF16UTF16和UTF8中选择,默认值是AF16UTF16

2.4.3查询字符集参数
可以查询以下数据字典或视图查看字符集设置情况
nls_database_parameters、props$、v$nls_parameters
查询结果中NLS_CHARACTERSET表示字符集,NLS_NCHAR_CHARACTERSET表示国家字符集

2.4.4修改数据库字符集
按照上文所说,数据库字符集在创建后原则上不能更改。不过有2种方法可行。

1. 如果需要修改字符集,通常需要导出数据库数据,重建数据库,再导入数据库数据的方式来转换。
2. 通过ALTER DATABASE CHARACTER SET语句修改字符集,但创建数据库后修改字符集是有限制的,只有新的字符集是当前字符集的超集时才能修改数据库字符集,例如UTF8是US7ASCII的超集,修改数据库字符集可使用ALTER DATABASE CHARACTER SET UTF8。

2.5 客户端字符集(NLS_LANG参数)

2.5.1客户端字符集含义
客户端字符集定义了客户端字符数据的编码方式,任何发自或发往客户端的字符数据均使用客户端定义的字符集编码,客户端可以看作是能与数据库直接连接的各种应用,例如sqlplus,exp/imp等。客户端字符集是通过设置NLS_LANG参数来设定的。

2.5.2 NLS_LANG参数格式
NLS_LANG=<language>_<territory>.<client character set>
Language: 显示oracle消息,校验,日期命名
Territory:指定默认日期、数字、货币等格式
Client character set:指定客户端将使用的字符集
例如:NLS_LANG=AMERICAN_AMERICA.US7ASCII
AMERICAN是语言,AMERICA是地区,US7ASCII是客户端字符集

2.5.3客户端字符集设置方法
1)UNIX环境
$NLS_LANG=“simplified chinese”_china.zhs16gbk
$export NLS_LANG
编辑oracle用户的profile文件
2)Windows环境
编辑注册表
Regedit.exe ---》 HKEY_LOCAL_MACHINE ---》SOFTWARE ---》 ORACLE-HOME

2.5.4 NLS参数查询
Oracle提供若干NLS参数定制数据库和用户机以适应本地格式,例如有NLS_LANGUAGE,NLS_DATE_FORMAT,NLS_CALENDER等,可以通过查询以下数据字典或v$视图查看。
NLS_DATABASE_PARAMETERS:显示数据库当前NLS参数取值,包括数据库字符集取值
NLS_SESSION_PARAMETERS: 显示由NLS_LANG 设置的参数,或经过alter session 改变后的参数值(不包括由NLS_LANG 设置的客户端字符集)
NLS_INSTANCE_PARAMETE: 显示由参数文件init<SID>.ora 定义的参数
V$NLS_PARAMETERS:显示数据库当前NLS参数取值

2.5.5修改NLS参数
使用下列方法可以修改NLS参数
(1)修改实例启动时使用的初始化参数文件
(2)修改环境变量NLS_LANG
(3)使用ALTER SESSION语句,在oracle会话中修改
(4)使用某些SQL函数
NLS作用优先级别:Sql function > alter session > 环境变量或注册表 > 参数文件 > 数据库默认参数

三.EXP/IMP 与 字符集
3.1 EXP/IMP
Export 和 Import 是一对读写Oracle数据的工具。Export 将 Oracle 数据库中的数据输出到操作系统文件中, Import 把这些文件中的数据读到Oracle 数据库中,由于使用exp/imp进行数据迁移时,数据从源数据库到目标数据库的过程中有四个环节涉及到字符集,如果这四个环节的字符集不一致,将会发生字符集转换。
EXP
____________ _________________ _____________
|imp导入文件|<-|环境变量NLS_LANG|<-|数据库字符集|
------------ ----------------- -------------
IMP
____________ _________________ _____________
|imp导入文件|->|环境变量NLS_LANG|->|数据库字符集|
------------ ----------------- -------------

四个字符集是
(1)源数据库字符集
(2)Export过程中用户会话字符集(通过NLS_LANG设定)
(3)Import过程中用户会话字符集(通过NLS_LANG设定)
(4)目标数据库字符集

3.2导出的转换过程
在Export过程中,如果源数据库字符集与Export用户会话字符集不一致,会发生字符集转换,并在导出文件的头部几个字节中存储Export用户会话字符集的ID号。在这个转换过程中可能发生数据的丢失。

例:如果源数据库使用ZHS16GBK,而Export用户会话字符集使用US7ASCII,由于ZHS16GBK是16位字符集,而US7ASCII是7位字符集,这个转换过程中,中文字符在US7ASCII中不能够找到对等的字符,所以所有中文字符都会丢失而变成“?? ”形式,这样转换后生成的Dmp文件已经发生了数据丢失。
因此如果想正确导出源数据库数据,则Export过程中用户会话字符集应等于源数据库字符集或是源数据库字符集的超集

3.3导入的转换过程
(1)确定导出数据库字符集环境
通过读取导出文件头,可以获得导出文件的字符集设置
(2)确定导入session的字符集,即导入Session使用的NLS_LANG环境变量
(3)IMP读取导出文件
读取导出文件字符集ID,和导入进程的NLS_LANG进行比较
(4)如果导出文件字符集和导入Session字符集相同,那么在这一步骤内就不需要转换, 如果不同,就需要把数据转换为导入Session使用的字符集。可以看出,导入数据到数据库过程中发生两次字符集转换

第一次:导入文件字符集与导入Session使用的字符集之间的转换,如果这个转换过程不能正确完成,Import向目标数据库的导入过程也就不能完成。
第二次:导入Session字符集与数据库字符集之间的转换。

四. 查看数据库字符集
涉及三方面的字符集,
1. oracel server端的字符集;
2. oracle client端的字符集;
3. dmp文件的字符集。

在做数据导入的时候,需要这三个字符集都一致才能正确导入。

4.1 查询oracle server端的字符集
有很多种方法可以查出oracle server端的字符集,比较直观的查询方法是以下这种:
SQL> select userenv('language') from al;
USERENV('LANGUAGE')
----------------------------------------------------
SIMPLIFIED CHINESE_CHINA.ZHS16GBK

SQL>select userenv(‘language’) from al;
AMERICAN _ AMERICA. ZHS16GBK

4.2 如何查询dmp文件的字符集
用oracle的exp工具导出的dmp文件也包含了字符集信息,dmp文件的第2和第3个字节记录了dmp文件的字符集。如果dmp文件不大,比如只有几M或几十M,可以用UltraEdit打开(16进制方式),看第2第3个字节的内容,如0354,然后用以下SQL查出它对应的字符集:
SQL> select nls_charset_name(to_number('0354','xxxx')) from al;
ZHS16GBK

如果dmp文件很大,比如有2G以上(这也是最常见的情况),用文本编辑器打开很慢或者完全打不开,可以用以下命令(在unix主机上):
cat exp.dmp |od -x|head -1|awk '{print $2 $3}'|cut -c 3-6
然后用上述SQL也可以得到它对应的字符集。

4.3 查询oracle client端的字符集
在windows平台下,就是注册表里面相应OracleHome的NLS_LANG。还可以在dos窗口里面自己设置,
比如: set nls_lang=AMERICAN_AMERICA.ZHS16GBK
这样就只影响这个窗口里面的环境变量。

在unix平台下,就是环境变量NLS_LANG。
$echo $NLS_LANG
AMERICAN_AMERICA.ZHS16GBK

如果检查的结果发现server端与client端字符集不一致,请统一修改为同server端相同的字符集。

补充:
(1).数据库服务器字符集
select * from nls_database_parameters
来源于props$,是表示数据库的字符集。

(2).客户端字符集环境
select * from nls_instance_parameters
其来源于v$parameter,表示客户端的字符集的设置,可能是参数文件,环境变量或者是注册表

(3).会话字符集环境
select * from nls_session_parameters
来源于v$nls_parameters,表示会话自己的设置,可能是会话的环境变量或者是alter session完成,如果会话没有特殊的设置,将与nls_instance_parameters一致。

(4).客户端的字符集要求与服务器一致,才能正确显示数据库的非Ascii字符。
如果多个设置存在的时候,NLS作用优先级别:Sql function > alter session > 环境变量或注册表 > 参数文件 > 数据库默认参数

字符集要求一致,但是语言设置却可以不同,语言设置建议用英文。如字符集是zhs16gbk,则nls_lang可以是American_America.zhs16gbk。

五. 修改oracle的字符集
按照上文所说,数据库字符集在创建后原则上不能更改。因此,在设计和安装之初考虑使用哪一种字符集十分重要。对数据库server而言,错误的修改字符集将会导致很多不可测的后果,可能会严重影响数据库的正常运行,所以在修改之前一定要确认两种字符集是否存在子集和超集的关系。一般来说,除非万不得已,我们不建议修改oracle数据库server端的字符集。特别说明,我们最常用的两种字符集ZHS16GBK和ZHS16CGB231280之间不存在子集和超集关系,因此理论上讲这两种字符集之间的相互转换不受支持。

不过修改字符集有2种方法可行。
1. 通常需要导出数据库数据,重建数据库,再导入数据库数据的方式来转换。
2. 通过ALTER DATABASE CHARACTER SET语句修改字符集,但创建数据库后修改字符集是有限制的,只有新的字符集是当前字符集的超集时才能修改数据库字符集,例如UTF8是US7ASCII的超集,修改数据库字符集可使用ALTER DATABASE CHARACTER SET UTF8。

5.1 修改server端字符集(不建议使用)

1. 关闭数据库
SQL>SHUTDOWN IMMEDIATE

2. 启动到Mount
SQL>STARTUP MOUNT;
SQL>ALTER SYSTEM ENABLE RESTRICTED SESSION;
SQL>ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0;
SQL>ALTER SYSTEM SET AQ_TM_PROCESSES=0;
SQL>ALTER DATABASE OPEN;

--这里可以从父集到子集
SQL>ALTER DATABASE CHARACTER SET ZHS16GBK;
SQL>ALTER DATABASE NATIONAL CHARACTER SET ZHS16GBK;

--如果是从子集到父集,需要使用INTERNAL_USE 参数,跳过超子集检测
SQL>ALTER DATABASE CHARACTER SET INTERNAL_USE AL32UTF8;
SQL>ALTER DATABASE NATIONAL CHARACTER SET INTERNAL_USE AL32UTF8;

SQL>SHUTDOWN IMMEDIATE;

SQL>STARTUP
注意:如果没有大对象,在使用过程中进行语言转换没有什么影响,(切记设定的字符集必须是ORACLE支持,不然不能start) 按上面的做法就可以。

若出现‘ORA-12717: Cannot ALTER DATABASE NATIONAL CHARACTER SET when NCLOB data exists’ 这样的提示信息,
要解决这个问题有两种方法
1. 利用INTERNAL_USE 关键字修改区域设置,
2. 利用re-create,但是re-create有点复杂,所以请用internal_use

SQL>SHUTDOWN IMMEDIATE;
SQL>STARTUP MOUNT EXCLUSIVE;
SQL>ALTER SYSTEM ENABLE RESTRICTED SESSION;
SQL>ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0;
SQL>ALTER SYSTEM SET AQ_TM_PROCESSES=0;
SQL>ALTER DATABASE OPEN;
SQL>ALTER DATABASE NATIONAL CHARACTER SET INTERNAL_USE UTF8;
SQL>SHUTDOWN immediate;
SQL>startup;
如果按上面的做法做,National charset的区域设置就没有问题

5.2 修改dmp文件字符集
上文说过,dmp文件的第2第3字节记录了字符集信息,因此直接修改dmp文件的第2第3字节的内容就可以‘骗’过oracle的检查。这样做理论上也仅是从子集到超集可以修改,但很多情况下在没有子集和超集关系的情况下也可以修改,我们常用的一些字符集,如US7ASCII,WE8ISO8859P1,ZHS16CGB231280,ZHS16GBK基本都可以改。因为改的只是dmp文件,所以影响不大。

具体的修改方法比较多,最简单的就是直接用UltraEdit修改dmp文件的第2和第3个字节。
比如想将dmp文件的字符集改为ZHS16GBK,可以用以下SQL查出该种字符集对应的16进制代码: SQL> select to_char(nls_charset_id('ZHS16GBK'), 'xxxx') from al;
0354
然后将dmp文件的2、3字节修改为0354即可。
如果dmp文件很大,用ue无法打开,就需要用程序的方法了。

5.3客户端字符集设置方法
1)UNIX环境
$NLS_LANG=“simplified chinese”_china.zhs16gbk
$export NLS_LANG
编辑oracle用户的profile文件
2)Windows环境
编辑注册表
Regedit.exe ---》 HKEY_LOCAL_MACHINE ---》SOFTWARE ---》 ORACLE-HOME
或者在窗口设置:
set nls_lang=AMERICAN_AMERICA.ZHS16GBK

⑨ 数据库ORACLE里面的英文缩写

1.B.C.——British Columbia加拿大卑诗省的英文名,也称“英属哥伦比亚”省或“不列颠哥伦比亚”省

2.BCSIP——British Columbia Settlement and Integration Program卑诗省新移民安置及融入计划

3.CPP——Canada Pension Plan加拿大退休金计划

4.CIC——Citizenship and Immigration Canada加拿大公民及移民部

5.CPR——Canadian Pacific Railway加拿大太平洋铁路

6.EI——Employment Insurance就业保险

7.ESL——English as a Second Language英语作为第二语言

8.GIC——Guaranteed Investment Certificate保证投资回报存款证

9.GST——Goods and Services Tax货品服务税

10.ICBC——Insurance Corporation of British Columbia卑诗省汽车保险公司

11.ID——Identification身份证明文件

12.IFH——Interim Federal Health联邦政府临时医疗纸

13.MSP——Medical Services Plan医疗保健计划

14.OLA——Open Learning Agency公开成人教育中心

15.PST——Provincial Sales Tax省销售税

16.RCMP——Royal Canadian Mounted Police加拿大皇家骑警

17.RRSP——Registered Retirement Savings Plan注册退休储蓄计划

18.WCB——Worker's Compensation Board工人赔偿局

19.YMCA——Young Men's Christian Association基督教男青年会

20.YWCA——Young Women's Christian Association基督教女青年会

(以上缩写的发音是逐个英文字母念)

(以下缩写的发音是将缩写字母拼读)

21.CANN——Community Airport Newcomer's Network新移民社区适应及机场接待处

22.ICES——International Credential Evaluation Service国际文凭审核服务处

23.SAFER——Shelter Aid For Elderly Renters为老年租户提供租金援助计划

24.SIN——Social Insurance Number社会保险卡

星期
星期一:MONDAY=MON 星期二:TUESDAY=TUS
星期三:WENSEDAY=WEN 星期四:THURSDAY=THUR
星期五:FRIDAY=FRI 星期六:SATURDAY=SAT
星期天:SUNDAY=SUN

月份
一月份=JAN 二月份=FEB
三月份=MAR 四月份=APR
五月份=MAY 六月份=JUN
七月份=JUL 八月份=AUG
九月份=SEP 十月份=OCT
十一月份=NOV 十二月份=DEC

常用词
4=FOR 到永远=FOREVER
2=TO RTN=RETURN(送回)
BT=BLOOD TYPE(血型) PLS=PLEASE(请)
BD=BIRTHDAY(生日) REWARD=酬谢
REWARD 4 RETURN=送回有酬谢 ALLRG=过敏

军事术语
USMC=海军陆战队 NAVY=海军
AF=AIR FORCE(空军) ARMY=陆军

宗教类
C=CHRISTIANISM(基督教) J=JUDAISM(犹太教)
C=CATHOLICISM(天主教) B=BUDDHISM(佛教)
I=ISLAM(伊斯兰教) NR=NO REFERENCE(没有宗教信仰)

星座
水瓶座: AQUARIUS(1月21日 - 2月19日)
双鱼座: PISCES(2月20日 - 3月20日 )
白羊座: ARIES (3月21日 - 4月20日 )
金牛座: TAURUS(4月21日 - 5月21日)
双子座: GEMINI(5月22日 - 6月21日 )
巨蟹座: CANCER(6月22日 - 7月23日 )
狮子座: LEO(7月24日 - 8月23日)
处女座: VIRGO(8月24日 - 9月23日 )
天秤座: LIBRA (9月24日 - 10月23日 )
天蝎座: SCORPIUS(10月24日 - 11月22日 )
人马座: SAGITTARIUS(11月23日 - 12月21日 )
山羊座: CAPRICORNUS (12月22日 - 1月20日 )
1. 国际性或全美性:

UNESCO (United Nations Ecational, Scientific and Cultural organization)联合国教育科学文化组织(也叫国际文教组织)
例如: (The)UNESCO has made some contributions to the world.(UNESCO 对世界做出一些贡献)

NATO(North Atlantic Treaty organization)北大西洋公约组织。
例如:Could(the)NATO members stick to their commitments?(NATO 的成员能坚守承担义务吗?)

SALT(Strategic Arms Limitation Treaty)战略武器限制公约
例如:Should every nation join(the)SALT?(每个国家都要加入 SALT?)

NASA(National Aeronautics and Space Administration)美国航天太空总署
例句:The U.S. space programs depend on the performances of NASA.(美国的太空计画是靠NASA的表现而定。)
(注:以上缩写字也被人们当做一个字看待)

WHO(World Health organization)世界卫生组织
例句:Taiwan has been trying to become one of the WHO members.(台湾一直想办法成为WHO的成员之一)

FBI(Federal Bureau of Investigation)联邦调查局(负责美国境内)

CIA(Central Intelligence Agency)中央情报局(负责国外)
例句:Over the past years, Dr. and Mrs. Lee have worked for both FBI and CIA.(过去多年来李博士夫妇都为 FBI 和 CIA 工作)

FDA(Food and Drug Administration)美国食品药物管理局
例句:This new drug has to be approved by the FDA.(这新药要经 FDA 批准)

USDA(United States Department of Agriculture)美国农业部
例句:USDA supplies myriad of information on agriculture market.(有关农业市场,USDA 供应大量资料。)

IRS(Internal Revenue Service)美国税务局
例句:Employees working for IRS should be courteous toward tax payers.(IRS 员工对纳税人应该有礼貌)

NAACP(National Association for the Advancement of Color People)(全国黑人权益促进会,即黑人为了增进权益的最大机构)
例句:Many African-Americans join NAACP.(许多美国黑人参加 NAACP)

NIH(National Institute of Health)
例句:Mr. Wang has worked at NIH as a researcher.(王先生在 NIH 担任研究员)

AARP (American Association of Retired People.)(美国退休人员协会)
例句:At age 50, you are eligible to be a member of AARP.(如果你 50 岁就可以成为 AARP 的会员)

AAUP (American Association of University Professors) (美国大学教授协会)
例句:The AAUP has many branches at different colleges and universities in the U.S. (AAUP 在美国各大学有很多分会)

SCORE (Services Corps of Retired Executives)(退休主管服务队)(这是美国企业界主管退休后,免费担任顾问,协助年轻人创业的团体。)
(注意:corps 单复数一样,发音与 corpse 不同,要小心。)
(注:老外在机构名称缩写字前面,有时加冠词 the, a ,an,有时不加,不过在正式文件里,通常都加。)

2. 一般考试名称:

SAT (Scholastic Aptitude Test) 学术能力倾向测验 (就是美国为高中生想进大学而设的考试)
例句:The well-known universities accept new students based on SAT scores and well-rounded personalities. (名大学接受新生根据 SAT 成绩及各方面优良的品德)

GPA (Grade Point Average)(学业成绩总平均)
例句:His GPA always stands on the top of his class. (他的 GPA 都是全班第一)

GED (General Equivalent Diploma); 一般同等文凭(高中没有毕业的学生,如果参加 GED,及格后,就可取得高中毕业证书)
例句:If he passes GED test, he will earn a high school diploma.

AP (advanced placement) 在校高中生,如果选修 AP 课程,考试及格,将来进大学时,可不必再修。
例句:His son took some AP courses at high school.

GMAT (Graate Management Admission Test) 美国为攻读企管硕士 (MBA) 学生而设的入学考试
例句:In order to enter a MBA program, you need a high score on GMAT.

LSAT (Law School Admission Test) 美国为攻读法律学生而设的入学考试
例句:He did very well in his LSAT. (他的 LSAT 考得不错)

MCAT (Medical College Admission Test) 美国为进入医学院学生而设的考试
例句:Do you think he will do well in his MCAT?

GRE (Graate Record Exam) 这是美国大学研究所对一般研究生的入学考试
例句:Most American graate schools require GRE scores.(多半美国研究所需要 GRE 成绩)

TOEFL (Test of English as a Foreign Language) 外国学生想进美国大学的英语能力考试(即所谓:“托福”考试)
例句:Almost all Chinese college graates are required to take TOEFL if they come to the U.S. for advanced degrees. (几乎所有的中国大学毕业生都要参加 TOEFL,假如他们要到美国取得高学位的话。)

CLEP(College Level Exam Program) 任何人只要有学识专长,都可参加这种考试,一旦及格,就可取得大学的学分。
例句:As long as you pass CLEP, You may earn college credits.(只要你通过 CLEP,就能获得大学学分。)
(注:老外一般所谓“大学”只说 College,不说 University)

ESOL(English for Speakers of Other Languages) 这是美国为新来移民或外国学生所设的特别英语课程。也叫 ESL(English as a Second Language)
例句:Many American campuses offer ESOL courses for foreign students.(许多美国校园为外国学生开设 ESOL 课程)

3. 一般生活方面:

EOE (Equal Opportunity Employer) 这是美国各机构招考员工时向申请工作者表明自己是“平等机会雇主”。
例句:All African-Americans hope that their employments will be based on EOE.(所有美国黑人都希望他们的工作机会均等)

DOQ (Depending on Qualifications) 根据申请工作者的资历决定是否雇用。
例句:The DOQ policy is being used by our school in hiring new teachers. (聘请新教师时,本校采用 DOQ 政策。)

PR (Public Relation) 公共关系
例句:The college president wants to improve its PR with the community.(大学校长想与社区增进公共关系)

CEO (Chief Executive Officer) 最高行政执行长 (多半指企业界或公司领导人)
例句:The CEO of this company will resign because of poor health. (这公司的 CEO 因为身体不好而辞职)

CPA (Certified Public Accountant) 美国有执照的会计师
例句:Do you have a CPA to prepare your income tax?(你有 CPA 为你报税吗?)

COLA (Cost of Living Adjustment) 生活费用的调整(即加薪时是按生活指数而定)
例句:Our annual pay raise will be based on COLA.

STD (Sexually Transmitted Disease) = VD = Venereal Disease 性病(现在 STD 较常用)
例句:Many teen-agers face STD problems.(许多青少年面临 STD 问题)

SOA (Sexually oriented Advertisement) 有关性方面的广告
例句:Don\'t you feel we have too much SOA in the media?(你不认为在媒体上有太多的 SOA 吗?)

GOP (Grand Old Party) 美国共和党另一称呼 = Republican Party
例句:The GOP has nominated Mr. Bush as its Presidential candidate.(GOP 已提名 Bush 先生为总统候选人)

PMS (Pre-menstrual Syndrome) 这是女人在月经前不舒服或心情不好所常用的缩写字
例句:Don\'t bother her; she has PMS.

ADHD (Attention Deficit Hyperactivity Disorder) 指青少年不能集中注意力,静不下来的一种病症。
例句:Tens of thousands of youngsters are suffering from ADHD in the U.S. (在美国成千上万的青少年有 ADHD 的毛病)

RSVP (Respondez sil vous plait) 这是法文,通常在请帖上使用的“敬请回音”= Please reply(或 respond)
例句:There is“RSVP”on the invitation card.

BYOB (bring your own bottle) 老外请客时,为了减少负担或个人爱好酒的品种,在请帖上注明“请自己带酒”。
例句:Whenever he invites guests, he asks “BYOB”。 (他只要请客,就要人家自己带酒。)

AIDS (Acquired Immune Deficiency Sydrome) 爱滋病
例句:AIDS has spread all over the world.

CPR (Cardiopulmonary resuscitation) 心脏病急救法
例句:Everyone should learn how to do CPR.

EKG (Electrocardiography) 心电图检查 (不是 ECG)
例句:Her physician asks her to have an EKG next week. (医生要她下周做 EKG)

IV (intravenous injection) 为病人注射的点滴
例句:In the hospital emergency room, I saw a patient with an IV on his arm. (在医院大的急诊病房里,我看见一个病人在打点滴)

⑩ oracle数据库中有哪些字符集,字符集之间的子集和超集关系是怎么样的

理解ORACLE数据库字符集

一.引言

ORACLE数据库字符集,即Oracle全球化支持(Globalization Support),或即国家语言支持(NLS)其作用是用本国语言和格式来存储、处理和检索数据。利用全球化支持,ORACLE为用户提供自己熟悉的数据库母语环境,诸如日期格式、数字格式和存储序列等。Oracle可以支持多种语言及字符集,其中oracle8i支持48种语言、76个国家地域、229种字符集,而oracle9i则支持57种语言、88个国家地域、235种字符集。由于oracle字符集种类多,且在存储、检索、迁移oracle数据时多个环节与字符集的设置密切相关,因此在实际的应用中,数据库开发和管理人员经常会遇到有关oracle字符集方面的问题。本文通过以下几个方面阐述,对oracle字符集做简要分析

二.字符集基本知识

2.1字符集
实质就是按照一定的字符编码方案,对一组特定的符号,分别赋予不同数值编码的集合。Oracle数据库最早支持的编码方案是US7ASCII。
Oracle 的字符集命名遵循以下命名规则 :

即: <语言><比特位数><编码 >
比如: ZHS16GBK表示采用GBK编码格式、16位(两个字节)简体中文字符集

2.2字符编码方案
2.2.1 单字节编码
(1)单字节7位字符集,可以定义128个字符,最常用的字符集为 US7ASCII
(2)单字节8位字符集,可以定义256个字符,适合于欧洲大部分国家
例如:WE8ISO8859P1(西欧、8位、ISO标准8859P1编码 )
2.2.2 多字节编码
(1)变长多字节编码
某些字符用一个字节表示,其它字符用两个或多个字符表示,变长多字节编码常用于对亚洲语言的支持, 例如日语、汉语、印地语等
例如:AL32UTF8(其中AL代表ALL,指适用于所有语言)、 zhs16cgb231280
(2)定长多字节编码
每一个字符都使用固定长度字节的编码方案,目前oracle唯一支持的定长多字节编码是AF16UTF16,也是仅用于国家字符集
2.2.3 unicode 编码
Unicode 是一个涵盖了目前全世界使用的所有已知字符的单一编码方案,也就是说Unicode为每一个字符提供唯一的编码。UTF-16是unicode的16位编码方式,是一种定长多字节编码,用2个字节表示一个unicode字符,AF16UTF16是UTF-16编码字符集。
UTF-8 是unicode的8位编码方式,是一种变长多字节编码,这种编码可以用1、2、3个字节表示一个unicode字符,AL32UTF8,UTF8、UTFE是UTF-8编码字符集

2.3 字符集超级
当一种字符集(字符集A)的编码数值包含所有另一种字符集(字符集B)的编码数值,并且两种字符集相同编码数值代表相同的字符时,则字符集A是字符集B的超级,或称字符集B是字符集A的子集。
Oracle8i 和oracle9i官方文档资料中备有子集-超级对照表(subset-superset pairs),例如:WE8ISO8859P1是WE8MSWIN1252的子集。由于US7ASCII是最早的Oracle数据库编码格式,因此有许多字符集是US7ASCII的超集,例如WE8ISO8859P1、ZHS16CGB231280、ZHS16GBK都是US7ASCII的超集。

2.4 数据库字符集(oracle服务器端字符集)
数据库字符集在创建数据库时指定,在创建后通常不能更改。在创建数据库时,可以指定字符集(CHARACTER SET)和国家字符集(NATIONAL CHARACTER SET)。
2.4.1 字符集
(1) 用来存储CHAR, VARCHAR2, CLOB, LONG等类型数据
(2) 用来标示诸如表名、列名以及PL/SQL变量等
(3) 用来存储SQL和PL/SQL程序单元等
2.4.2 国家字符集:
(1) 用以存储NCHAR, NVARCHAR2, NCLOB等类型数据
(2) 国家字符集实质上是为oracle选择的附加字符集,主要作用是为了增强oracle的字符处理能力,因为NCHAR数据类型可以提供对亚洲使用定长多字节编码的支持,而数据库字符集则不能。国家字符集在oracle9i中进行了重新定义,只能在unicode编码中的AF16UTF16和UTF8中选择,默认值是 AF16UTF16
2.4.3查询字符集参数
可以查询以下数据字典或视图查看字符集设置情况
nls_database_parameters 、props$、 v$nls_parameters
查询结果中NLS_CHARACTERSET表示字符集,NLS_NCHAR_CHARACTERSET表示国家字符集
2.4.4 修改数据库字符集
按照上文所说,数据库字符集在创建后原则上不能更改。如果需要修改字符集,通常需要导出数据库数据,重建数据库,再导入数据库数据的方式来转换,或通过ALTER DATABASE CHARACTER SET语句修改字符集,但创建数据库后修改字符集是有限制的,只有新的字符集是当前字符集的超集时才能修改数据库字符集,例如UTF8是US7ASCII的超集,修改数据库字符集可使用ALTER DATABASE CHARACTER SET UTF8。

2.5 客户端字符集(NLS_LANG参数)
2.5.1 客户端字符集含义
客户端字符集定义了客户端字符数据的编码方式,任何发自或发往客户端的字符数据均使用客户端定义的字符集编码,客户端可以看作是能与数据库直接连接的各种应用,例如sqlplus,exp/imp等。客户端字符集是通过设置NLS_LANG参数来设定的。
2.5.2 NLS_LANG 参数格式
NLS_LANG=_.
Language: 显示oracle消息,校验,日期命名
Territory :指定默认日期、数字、货币等格式
Client character set :指定客户端将使用的字符集
例如: NLS_LANG=AMERICAN_AMERICA.US7ASCII
AMERICAN是语言,AMERICA是地区,US7ASCII是客户端字符集
2.5.3 客户端字符集设置方法
1)UNIX 环境
$NLS_LANG=“simplified chinese”_china.zhs16gbk
$export NLS_LANG
编辑oracle用户的profile文件
2)Windows 环境
编辑注册表
Regedit.exe---HKEY_LOCAL_MACHINE---SOFTWARE---ORACLE—HOME0
2.5.4 NLS 参数查询
Oracle 提供若干NLS参数定制数据库和用户机以适应本地格式,例如有NLS_LANGUAGE,NLS_DATE_FORMAT,NLS_CALENDER等,可以通过查询以下数据字典或v$视图查看。
NLS_DATABASE_PARAMETERS-- 显示数据库当前NLS参数取值,包括数据库字符集取值
NLS_SESSION_PARAMETERS-- 显示由NLS_LANG 设置的参数,或经过alter session 改变后的参数值(不包括由NLS_LANG 设置的客户端字符集)
NLS_INSTANCE_PARAMETE-- 显示由参数文件init.ora 定义的参数V$NLS_PARAMETERS--显示数据库当前NLS参数取值
2.5.5 修改NLS参数
使用下列方法可以修改NLS参数
(1)修改实例启动时使用的初始化参数文件
(2)修改环境变量 NLS_LANG
(3)使用ALTER SESSION语句,在oracle会话中修改
(4)使用某些SQL函数
NLS 作用优先级别:Sql function>alter session>环境变量或注册表>参数文件>数据库默认参数

三.导入/导出与字符集转换

3.1 EXP/IMP
Export 和 Import 是一对读写Oracle数据的工具。Export 将 Oracle 数据库中的数据输出到操作系统文件中, Import 把这些文件中的数据读到Oracle 数据库中,由于使用exp/imp进行数据迁移时,数据从源数据库到目标数据库的过程中有四个环节涉及到字符集,如果这四个环节的字符集不一致,将会发生字符集转换。

EXP
____________ _________________ _____________
|imp导入文件|<-><->
------------ ----------------- -------------

IMP
____________ _________________ _____________
|imp导入文件|->|环境变量NLS_LANG|->|数据库字符集|
------------ ----------------- -------------

四个字符集是
(1)源数据库字符集
(2)Export过程中用户会话字符集(通过NLS_LANG设定)
(3)Import过程中用户会话字符集(通过NLS_LANG设定)
(4)目标数据库字符集

3.2导出的转换过程
在Export过程中,如果源数据库字符集与Export用户会话字符集不一致,会发生字符集转换,并在导出文件的头部几个字节中存储Export用户会话字符集的ID号。在这个转换过程中可能发生数据的丢失。
例:如果源数据库使用ZHS16GBK,而Export用户会话字符集使用US7ASCII,由于ZHS16GBK是16位字符集,而US7ASCII是7位字符集,这个转换过程中,中文字符在US7ASCII中不能够找到对等的字符,所以所有中文字符都会丢失而变成“?? ”形式,这样转换后生成的Dmp文件已经发生了数据丢失。
因此如果想正确导出源数据库数据,则Export过程中用户会话字符集应等于源数据库字符集或是源数据库字符集的超集

3.3导入的转换过程
(1)确定导出数据库字符集环境
通过读取导出文件头,可以获得导出文件的字符集设置
(2)确定导入session的字符集,即导入Session使用的NLS_LANG环境变量
(3)IMP读取导出文件
读取导出文件字符集ID,和导入进程的NLS_LANG进行比较
(4)如果导出文件字符集和导入Session字符集相同,那么在这一步骤内就不需要转换,如果不同,就需要把数据转换为导入Session使用的字符集。可以看出,导入数据到数据库过程中发生两次字符集转换
第一次:导入文件字符集与导入Session使用的字符集之间的转换,如果这个转换过程不能正确完成,Import向目标数据库的导入过程也就不能完成。
第二次:导入Session字符集与数据库字符集之间的转换。
然而,oracle8i的这种转换只能在单字节字符集之间进行,oracle8i导入Session不支持多字节字符集之间的转换,因此为了避免第一次转换,导入Session使用的NLS_LANG与导出文件字符集相同,第二次转换(通过SQL*Net)支持任何两种字符集。以上情况在Oracle9i中略有不同

四.乱码问题

oracle在数据存储、迁移过程中经常发生字符乱码问题,归根到底是由于字符集使用不当引起。下面以使用客户端sqlplus向数据库插入数据和导入/导出(EXP/IMP)过程为例,说明乱码产生的原因。

4.1使用客户端sqlplus向数据库存储数据
这个过程存在3个字符集设置
(1)客户端应用字符集
(2)客户端NLS_LANG参数设置
(3)服务器端数据库字符集(Character Set)设置
客户端应用sqlplus中能够显示什么样的字符取决于客户端操作系统语言环境(客户端应用字符集),但在应用中录入这些字符后,这些字符能否在数据库中正常存储,还与另外两个字符集设置紧密相关,其中客户端NLS_LANG参数主要用于字符数据传输过程中的转换判断。常见的乱码大致有两种情形:
(1)汉字变成问号“?”;
当从字符集A 转换成字符集B时,如果转换字符之间不存在对应关系,NLS_LANG使用替代字符“?”替代无法映射的字符
(2)汉字变成未知字符(虽然有些是汉字,但与原字符含义不同)
转换存在对应关系,但字符集A 中的字符编码与字符集B 中的字符编码代表不同含义

4.2发生乱码原因
乱码产生是由于几个字符集之间转换不匹配造成,分以下几种情况:
(注:字符集之间如果不存在子集、超集对应关系时的情况不予考虑,因为这种情况下字符集之间转换必产生乱码)
1)服务器端数据库字符集与客户端应用字符集相同,与客户端NLS_LANG参数设置不同
如果客户端NLS_LANG字符集是其它两种字符集的子集,转换过程将出现乱码。
解决方法:将三种字符集设置成同一字符集,或NLS_LANG字符集是其它两种字符集的超集
2 )服务器端数据库字符集与客户端NLS_LANG参数设置相同,与客户端应用字符集不同
如果客户端应用字符集是其它两种字符集的超集时,转换过程将出现乱码,但对于单字节编码存储中文问题,可参看本文第5章节的分析
3 )客户端应用字符集、客户端NLS_LANG参数设置、服务器端数据库字符集互不相同
此种情况较为复杂,但三种字符集之间只要有不能转换的字符,则必产生乱码

4.3导入/导出过程出现乱码原因
这个过程存在4个字符集设置,在3.1章节中已分析
(1)源数据库字符集
(2)EXP过程中NLS_LANG参数
(3)IMP过程中NLS_LANG参数
(4)目标数据库字符集
出现乱码原因
1 )当源数据库字符集不等于EXP过程中NLS_LANG参数,且源数据库字符集是EXP过程中NLS_LANG的子集,才能保证导出文件正确,其他情况则导出文件字符乱码
2 )EXP过程中NLS_LANG字符集不等于IMP过程中NLS_LANG字符集,且EXP过程中NLS_LANG字符集是IMP过程中NLS_LANG字符集的子级, 才能保证第一次转换正常,否则第一次转换中出现乱码。
3 )如果第一次转换正常,IMP过程中NLS_LANG字符集是目标数据库字符集的子集或相同,才能保证第二次转换正常,否则则第二次转换中出现乱码

五.单字节编码存储中文问题

由于历史的原因,早期的oracle没有中文字符集(如oracle6、oracle7、oracle7.1),但有的用户从那时起就使用数据库了,并用US7ASCII字符集存储了中文,或是有的用户在创建数据库时,不考虑清楚,随意选择一个默认的字符集,如WE8ISO8859P1或US7ASCII,而这两个字符集都没有汉字编码,虽然有些时候选用这种字符集好象也能正常使用,但用这种字符集存储汉字信息从原则上说就是错误的,它会给数据库的使用与维护带来一系列的麻烦。
正常情况下,要将汉字存入数据库,数据库字符集必须支持中文,而将数据库字符集设置为US7ASCII等单字节字符集是不合适的。US7ASCII字符集只定义了128个符号,并不支持汉字。另外,如果在SQL*PLUS中能够输入中文,操作系统缺省应该是支持中文的,但如果在NLS_LANG中的字符集设置为US7ASCII,显然也是不正确的,它没有反映客户端的实际情况。但在实际应用中汉字显示却是正确的,这主要是因为Oracle检查数据库与客户端的字符集设置是同样的,那么数据在客户与数据库之间的存取过程中将不发生任何转换,但是这实际上导致了数据库标识的字符集与实际存入的内容是不相符的。而在SELECT的过程中,Oracle同样检查发现数据库与客户端的字符集设置是相同的,所以它也将存入的内容原封不动地传送到客户端,而客户端操作系统识别出这是汉字编码所以能够正确显示。
在这个例子中,数据库与客户端都没有设置成中文字符集,但却能正常显示中文,从应用的角度看好象没问题。然而这里面却存在着极大的隐患,比如在应用length或substr等字符串函数时,就可能得到意外的结果。
对于早期使用US7ASCII字符集数据库的数据迁移到oracle8i/9i中(使用zhs16gbk),由于原始数据已经按照US7ASCII格式存储,对于这种情况,可以通过使用Oracle8i的导出工具,设置导出字符集为US7ASCII,导出后使用UltraEdit等工具打开dmp文件,修改第二、三字符,修改 0001 为0354,这样就可以将US7ASCII字符集的数据正确导入到ZHS16GBK的数据库中。

六.结束语

为了避免在数据库迁移过程中由于字符集不同导致的数据损失,oracle提供了字符集扫描工具(character set scanner),通过这个工具我们可以测试在数据迁移过程中由于字符集转换可能带来的问题,然后根据测试结果,确定数据迁移过程中最佳字符集解决方案。

参考文献
[1]Biju Thomas , Bob Bryla 《oracle9i DBA基础I 学习指南》电子工业出版社 2002

热点内容
电脑栏目缓存后变成空白页了 发布:2025-05-14 09:10:30 浏览:738
c语言的软件是什么 发布:2025-05-14 09:09:13 浏览:799
php微信支付教程视频教程 发布:2025-05-14 08:59:59 浏览:202
存储服务器分类 发布:2025-05-14 08:39:01 浏览:646
xz文件解压软件 发布:2025-05-14 08:28:43 浏览:970
lua脚本学习 发布:2025-05-14 08:20:55 浏览:714
python文件删除一行 发布:2025-05-14 08:06:58 浏览:722
如何下载奥特曼高级化3安卓版 发布:2025-05-14 07:47:31 浏览:346
qml文件修改后编译未生效 发布:2025-05-14 07:31:00 浏览:331
内到内算法 发布:2025-05-14 07:29:11 浏览:34