ORACLE字符集与编号对照表

合集下载

搞懂oracle字符集

搞懂oracle字符集

搞懂oracle字符集作为一个ORACLE DBA,在工作中会经常处理由于字符集产生的一些问题。

但是当真正想写一些这方面的东西时,却突然又没有了头绪。

发了半天呆,还是决定用两个字符集方面的例子作为切入点,倒不失为一个头绪,说不定在实验的过程中,问题就会一个接着一个的浮现出来。

现在,让我们切入正题。

我用的数据库是oracle10.2.0.3,数据库字符集是al32utf8。

客户端就是同一台机器的windows xp.下面是演示的例子:SQL>drop table test purge;Table dropped.SQL>create table test(col1number(1),col2varchar2(10));Table created.--session1设置客户端字符集为zhs16gbk(修改注册表nls_lang项的characterset为zhs16gbk)向表中插入两个中文字符。

SQL>insert into test values(1,'中国');--1为session1的标记1row created.SQL>commit;Commit complete.--session2设置客户端字符集al32utf8(修改注册表nls_lang项的characterset为al32utf8),与数据库字符集相同。

向表中插入两个和session1相同的中文字符。

SQL>insert into test values(2,'中国');--2为session2的标记1row created.SQL>commit;Commit complete.--session1SQL>select*from test;COL1COL2------------------------------2???1中国--session2SQL>select*from test;COL1COL2--------------------2中国1涓 浗从session1和session2的结果中可以看到,相同的字符(注意,我指的是我们看到的,显示为相同的字符),在不同的字符集输入环境下,显示成了乱码。

Oracle数据库命名编码规范

Oracle数据库命名编码规范

文件标识:QD-30-08密级:内部版本号:Ver1.0大庆金桥软件开发作业体系Oracle数据库命名编码规范变更历史目录1.文档介绍 (6)1.1 文档目的 (6)1.2 文档范围 (6)1.3 定义 (6)1.4 参考资料 (6)2.命名规范 (6)2.1 一般规则 (6)2.2 对象命名汇总表 (7)3.编码规范 (9)3.1 一般性规定 (9)3.2 CREATE语句 (10)3.3 SELECT语句 (10)3.4 INSERT语句 (12)3.5 UPDATE语句 (14)3.6 DELETE语句 (14)3.7 游标语句 (14)3.8 IF语句 (15)3.9 简单循环语句 (18)3.10 FOR循环语句 (19)3.11 WHILE循环语句 (19)3.12 程序块规范 (19)3.13 语法规范 (20)4.设计规范 (25)4.1 一般表设计 (25)4.2 专门表设计原则 (26)4.3 索引设计原则 (26)4.4 完整性设计原则 (27)4.5 触发器 (27)4.6 视图设计 (28)4.7 性能优化 (28)5.书写规范 (36)5.1 缩进风格 (36)5.2 空格及换行 (36)6.注释讲明 (38)6.1 一般性注释 (38)6.2 函数文本注释 (38)7.异常规范 (40)7.1 PL/SQL异常规范 (41)7.2 后台验证异常信息规范 (43)8.附录 (43)8.1 附一开发工具 (43)8.2 附二预定义异常 (45)8.3 附三范式 (46)8.3.1 ......................................... 第一范式468.3.2 ......................................... 第二范式478.3.3 ......................................... 第三范式478.3.4 .................................. Boyce-Codd范式478.3.5 ......................................... 第四范式488.3.6 ......................................... 第五范式488.3.7 ......................................... 反规范化481.文档介绍1.1文档目的本文档用于指导开发设计人员对Oracle数据库进行设计和编码。

Oracle数据库字符集问题总结

Oracle数据库字符集问题总结

Oracle数据库字符集问题总结在不同数据库做数据迁移、同其它系统交换数据等,常常因为字符集不同而导致迁移失败或数据库内数据变成乱码。

现在我将oracle字符集相关的一些知识做个简单总结一、什么是oracle字符集Oracle字符集是一个字节数据的解释的符号集合,有大小之分,有相互的包容关系。

ORACLE 支持国家语言的体系结构允许你使用本地化语言来存储,处理,检索数据。

它使数据库工具,错误消息,排序次序,日期,时间,货币,数字,和日历自动适应本地化语言和平台。

影响oracle数据库字符集最重要的参数是NLS_LANG参数。

它的格式如下:它有三个组成部分(语言、地域和字符集),每个成分控制了NLS子集的特性。

其中:Language 指定服务器消息的语言,territory 指定服务器的日期和数字格式,charset 指定字符集。

如:AMERICAN _ AMERICA. ZHS16GBK从NLS_LANG的组成我们可以看出,真正影响数据库字符集的其实是第三部分。

所以两个数据库之间的字符集只要第三部分一样就可以相互导入导出数据,前面影响的只是提示信息是中文还是英文。

二、如何查询Oracle的字符集很多人都碰到过因为字符集不同而使数据导入失败的情况。

这涉及三方面的字符集,一是oracel server端的字符集,二是oracle client端的字符集;三是dmp文件的字符集。

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

1、查询oracle server端的字符集有很多种方法可以查出oracle server端的字符集,比较直观的查询方法是以下这种:结果类似如下:AMERICAN _ AMERICA. ZHS16GBK2、如何查询dmp文件的字符集用oracle的exp工具导出的dmp文件也包含了字符集信息,dmp文件的第2和第3个字节记录了dmp文件的字符集。

如果dmp文件不大,比如只有几M或几十M,可以用UltraEdit 打开(16进制方式),看第2第3个字节的内容,如0354,然后用以下SQL查出它对应的字符集:如果dmp文件很大,比如有2G以上(这也是最常见的情况),用文本编辑器打开很慢或者完全打不开,可以用以下命令(在unix主机上):然后用上述SQL也可以得到它对应的字符集。

Oracle查看字符集

Oracle查看字符集

Oracle查看字符集1.查看字符集1⼀、oracle服务端字符集2 SQL> select userenv('language') from dual ;34 USERENV('LANGUAGE')5 ----------------------------------------------------6 AMERICAN_AMERICA.ZHS16GBK789⼆、oracle客户段字符集10112.1 window环境下,修改注册表ORACLE_HOME⽬录下的环境变量NLS_LANG。

12132.2 unix/linux环境下,就是环境变量$NLS_LANG1415 [oracle@wang ~]$ echo $NLS_LANG16 AMERICAN_AMERICA.ZHS16GBK1718查看数据库字符集1920数据库服务器字符集select * from nls_database_parameters;,其来源于props$,是表⽰数据库的字符集。

2122 客户端字符集环境select * from nls_instance_parameters;,其来源于v$parameter,表⽰客户端的字符集的设置,可能是参数⽂件,环境变量或者是注册表23 24如何查询dmp⽂件的字符集2526⽤oracle的exp⼯具导出的dmp⽂件也包含了字符集信息,dmp⽂件的第2和第3个字节记录了dmp⽂件的字符集。

如果dmp⽂件不⼤,⽐如只有⼏M或⼏⼗M,可以⽤UltraEdit打开(16进制⽅式),看第2第3个字节的内容,如0354,然后⽤以下SQL查2728 SQL> select nls_charset_name(to_number('0354','xxxx')) from dual;2930 ZHS16GBK3132如果dmp⽂件很⼤,⽐如有2G以上(这也是最常见的情况),⽤⽂本编辑器打开很慢或者完全打不开,可以⽤以下命令(在unix主机上):33cat exp.dmp |od -x|head -1|awk'{print $2 $3}'|cut -c 3-634然后⽤上述SQL也可以得到它对应的字符集2.od 命令解释#od命令功能说明:输出⽂件内容。

查看Oracle字符集及如何修改字符集

查看Oracle字符集及如何修改字符集

查看Oracle字符集及如何修改字符集文章分类:数据库一、什么是oracle字符集Oracle字符集是一个字节数据的解释的符号集合,有大小之分,有相互的包容关系。

ORACLE 支持国家语言的体系结构允许你使用本地化语言来存储,处理,检索数据。

它使数据库工具,错误消息,排序次序,日期,时间,货币,数字,和日历自动适应本地化语言和平台。

影响oracle数据库字符集最重要的参数是NLS_LANG参数。

它的格式如下: NLS_LANG = language_territory.charset它有三个组成部分(语言、地域和字符集),每个成分控制了NLS子集的特性。

其中:Language 指定服务器消息的语言,territory 指定服务器的日期和数字格式,charset 指定字符集。

如:AMERICAN _ AMERICA. ZHS16GBK从NLS_LANG的组成我们可以看出,真正影响数据库字符集的其实是第三部分。

所以两个数据库之间的字符集只要第三部分一样就可以相互导入导出数据,前面影响的只是提示信息是中文还是英文。

二.查看数据库字符集这涉及三方面的字符集,一是oracel server端的字符集;二是oracle client端的字符集;三是dmp文件的字符集。

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

1、查询oracle server端的字符集有很多种方法可以查出oracle server端的字符集,比较直观的查询方法是以下这种:SQL>select userenv(‘language’) from dua l;结果类似如下:AMERICAN _ AMERICA. ZHS16GBK2、如何查询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 dual;ZHS16GBK如果dmp文件很大,比如有2G以上(这也是最常见的情况),用文本编辑器打开很慢或者完全打不开,可以用以下命令(在unix主机上):catexp.dmp |od -x|head -1|awk '{print $2 $3}'|cut -c 3-6然后用上述SQL也可以得到它对应的字符集。

ORACLE数据库DBA专题-字符集

ORACLE数据库DBA专题-字符集

一、字符集基本知识Oracle全球支持(即Globalization Support)允许我们使用本地语言和格式来存储和检索数据。

通过全球支持,Oracle可以支持多种语言及字符集,得以展示数据库的强大魅力。

由于不同语言及字符集的共同存储存在设置上具有一定的复杂性,字符集一度成为普遍困扰大家的一个主要问题。

本文试图就一些常见问题进行探讨,希望可以把一些实际经验共享给大家!1.字符集的基本知识如果从头说起,字符集最早的编码方案来自于与ASCII.这也是我们最常见的编码方式。

该方案起源于1960年代初期,最初是美国国会图书馆制定用来作为美国图书馆界书目交换的共同标准,最后完善成为美国的国家标准 ASCII(American Standard Codefor Information Interchange),之后进一步演变成世界性的计算机字符编码标准ISO646(其全名为7-bit coded character set for information interchange)。

成为计算机编码方案的基础。

Oracle数据库最早支持的编码方案也就是US7ASCII.但是我们知道,英文字符一般是以一个字节来存储的,7位的编码方案最多只能代表128个字符;经过扩展的8位的编码方案也只能代表256个字符,这远远不能满足计算机发展的需要,对于亚洲国家复杂的字符存储需要更多的码位,于是各种编码方案随之而生。

为了容纳全世界各种语言的所有字符和符号,解决不同编码之间的兼容和转换问题,1991年元月,10多家公司共同出资,组建Unicode协会,随后Unicode编码产生了。

Unicode协会的口号是: 给每个字符提供了一个唯一的数字,不论是什么平台,不论是什么程序,不论什么语言。

最初Unicode编码使用2-Byte(16bit)来进行编码,但是最多只能容纳65536个字符,仍然不够使用,后来进行了扩充,也就是 Unicode3.1标准,增加了额外的补充字符定义,现在Unicode4.0标准已经发布,具体可以参考Unicode官方站点:Unicode编码方案主要有三个实施标准:UTF-8,USC-2,UTF-16。

oracle数据库字符集

oracle数据库字符集

oracle数据库字符集Oracle字符集的基本原理1. Oracle服务器字符集oracle以哪种字符编码存储字符,可以通过以下语句查出数据库字符集的设置。

⽅法1SQL> select * from v$nls_parameters where parameter='NLS_CHARACTERSET';PARAMETER VALUE---------------------------------------------------------------- ----------------------------------------------------------------NLS_CHARACTERSET AL32UTF8⽅法2SQL> select userenv('language') from dual;USERENV('LANGUAGE')----------------------------------------------------AMERICAN_AMERICA.AL32UTF82. 客户端操作系统字符集Windows,可以使⽤chcp命令获得代码页(code page)C:\Users\zy>chcp活动代码页: 936到微软的官⽅⽂档《》找到其对应的字符集Linux,字符集在/etc/sysconfig/i18n设置:LANG="zh_CN.GB2312" (指定当前操作系统的字符集)SUPPORTED="zh_CN.GB2312"(指定当前操作系统⽀持的字符集)SYSFONT="lat0-sun16"(指定当前操作系统的字体)3.客户端NLS_LANG参数:该参数⽤于向Oracle指⽰客户端操作系统字符集它的格式如下: NLS_LANG = language_territory.charset它有三个组成部分(语⾔、地域和字符集),每个成分控制了NLS⼦集的特性。

oracle参数符号

oracle参数符号

Oracle数据库中使用的参数符号主要包括以下几种:1.%:表示任意数量的字符,或者可能根本没有字符。

2._:表示确切的未知字符。

3.?:表示确切的未知字符。

4.#:表示确切的阿拉伯数字,0到9。

5.[a-d]:表示字符范围,在这里是从a到d。

6.':在Oracle中,应该只使用单引号将文本和字符和日期括起来,不能使用引号(包括单双引号)将数字括起来。

7.":在Oracle中,单双引号含义不同。

双引号被用来将包含特定字符或者空格的列别名括起来。

双引号还被用来将文本放入日期格式。

8.':在Oracle中,撇号也可以写成彼此相邻的两个单引号。

为了在供应商名字中间查找所有带撇号的供应商名字,可以这样编写代码: select *from l_suppliers where supplier_name like '%''%'。

9.&:在Oracle中,&这个字符如果直接用在SQL语句中,比如说SELECT FROMTEST_TABLEWHERECOLA='A&B' 这个语句如果直接执行,Oracle会提示你输入参数的值,系统会把“&”符号认为是参数符号,那么应该如何输入呢。

其实Oracle如果遇到'&'的话,就会不认为这个是参数符号,而是认为是字符'&',这样我们可以用拼接字符串的方式来解决。

如下所示SELECT FROMTEST_TABLEWHERECOLA='A'||'&'||'B' 这样写了以后就可以发现可以成功运行了。

缺点就是要进行一次字符串拼接。

Oracle服务端与客户端字符集

Oracle服务端与客户端字符集

Oracle客户端与服务端字符集Oracle 数据库对字符的处理及表现形式分为三个层面,优先级先后分别是数据库初始化参数字符集、OS操作系统环境变量级、session级。

数据库初始化参数字符集是在建数据库前指定的字符集,使用如下语句查询数据库字符集:SQL> select userenv('language') from dual;USERENV('LANGUAGE')----------------------------------------------------AMERICAN_AMERICA.ZHS16GBK完整字符集名称分为三部分:语言_地域.字符集,这里以AMERICAN_AMERICA.ZHS16GBK 和SIMPLIFIED CHINESE_CHINA.ZHS16GBK 为例说明各部分的含义:语言决定了提示信息使用的语言,如AMERICAN表示使用英语,SIMPLIFIED CHINESE表示使用简体中文;地域决定了缺省的日期格式等,如:AMERICA的时间格式为:SQL>select sysdate from dual;SYSDATE------------20-AUG-12CHINA的时间格式为:SQL>select sysdate from dual;SYSDATE--------------20-8月-12字符集的格式为<语言><比特位数><编码>比如: ZHS16GBK表示采用GBK 编码格式、16位(两个字节)简体中文字符集。

数据库建立后字符集原则上不要修改,如果修改可以用命令alter database set character set xxx; 不过这样修改有一定的危险,有可能会出现乱码造成数据的丢失,而且修改后的字符集一定是修改前字符集的超集,修改数据库字符集一般采用两种方法:1.导出数据库数据,重建数据库,再导入数据库数据的方式来转换。

orcle字符集系统介绍及设置

orcle字符集系统介绍及设置

Oracle全球化支持:字符集系统介绍及服务器端、客户端设置1. 字符集与编码常识字符集:人们根据需要把某些字符收集到一处,并赋以名称,于是便有了某某字符集。

例如:ASCII:ASCII字符集:包含大小写英文、阿拉伯数字、标点,以及一些不可见的控制符共128个。

ASCII编码:使用7位表示一个字符。

编码范围是[0-127](即Hex[00-7F]),其中[0-31](Hex[00-1F])部分以及127(Hex7F)是控制符,其余的都是些可见字符。

GB2312:GB2312字符集:ASCII字符集+7000左右汉字字符。

GB2312编码:兼容ASCII编码。

对字节进行判断,如值<=127,则意义等同于ASCII编码;如值>127,则它需要跟其后的另一个字节合并表示一个字符。

其理论汉字编码空间为128X256,超过3万个字符。

GBK:GBK字符集:GB2312字符集+20000左右汉字字符。

GBK编码:兼容GB2312编码。

利用了GB2312编码闲置的编码空间。

GB18030:GB18030字符集:GBK字符集+若干汉字+若干少数民族字符,为目前国内最新的字符集。

GB18030编码:兼容GBK编码。

继续利用GBK编码闲置的编码空间,对于超出编码空间的则采用4个字节表示。

BIG5:BIG5字符集:ASCII字符集+13000左右汉字(繁体)。

BIG编码:兼容ASCII编码。

其编码模式类似于GB2312.UNICODE:(UNICODE一词在日常使用中显得宽泛、混乱,在不同的语境中可以是以下意思之一。

)UNICODE标准:由一些组织提出的一套标准,对人类文字的显示、编码等进行了一系列的规定。

UNICODE字符集:目前最新版的UNICODE字符集中已经包含各种语言的超过10万的字符。

UNICODE编码:(狭义的UNICODE编码可能指UCS-2,也可能指UTF-16;广义的UNICODE 编码可以指包括以下四种在内的若干种对UNICODE标准的编码实现。

oracle 字符集与编码文摘

oracle 字符集与编码文摘

Oracle Database数据库与字符集赵元杰2008年03月目录§1A错误!未定义书签。

§1.1A1........................................................................................... 错误!未定义书签。

§1.1.1A11......................................................................................... 错误!未定义书签。

§1.1.2A12......................................................................................... 错误!未定义书签。

§1.1.3A13......................................................................................... 错误!未定义书签。

§1.2A2........................................................................................... 错误!未定义书签。

§1.2.1A21......................................................................................... 错误!未定义书签。

§1.2.2A22......................................................................................... 错误!未定义书签。

Oracle字符集编码

Oracle字符集编码

NLS_参数设置-ORACLE的全球化支持(GLOBALIZATION)为了更好的支持软件的本地化,oracle自9i起推出了全球化解决方案,早先版本称之为national language support,即NLS,你可以注意到在oracle中有一些以此缩写开头的视图和参数,全球化解决方案更好的解决不同语言、地域的文化差异性的问题。

一、先明确oracle几个和本地化有关的概念:1、LANGUAGE也就是语言,它约定了oracle用什么语言显示消息,排序的规则(二进制还是其他的),daynames,月份名称2、TERRITORY也就是地域,它约定oracle用什么格式显示日期、货币、数字。

3、characterset也就是字符集,它约定了字符的编码方式,请注意客户端和服务器段都有字符集的设置,oracle会自动实现字符转换,当也可能转换失败,用某个替代字符代替如?或其他乱码来代替,这当然不是你期望的结果,字符集的设置非常重要,需要认真考虑。

二、再明确进行本地化设置的几个优先级ORACLE通过以下5个层次实现本地化的相关设置数据库级(create database 时指定参数值,创建后通常不建议改变)实例级(根据init.ora的参数设置)客户端设置级(通常根据nls_lang来设定)会话级(通常用alter session命令来修改)语句级(在编写的sql语句中使用函数进行参数设定)以上5个层次,本地化设置的优先级依次升高,即实例的设置覆盖数据库的设置,以此类推。

三、字符集编码方案由于历史原因,不同的字符有不同的编码如ascii,unicode,gb2312等等,为了实现与平台无关,oracle提供了各种字符集的实现,而不是像ms word一样依赖于操作系统提供的字符集,很多的文章都介绍过字符集的相关知识,再此不做赘述四,究竟有哪些参数需要设定,可以参考下面的内容NLS_LANGUAGENLS_TERRITORYNLS_CURRENCYNLS_ISO_CURRENCYNLS_NUMERIC_CHARACTERSNLS_CALENDARNLS_DATE_FORMATNLS_DATE_LANGUAGENLS_SORTNLS_TIME_FORMATNLS_TIMESTAMP_FORMATNLS_TIME_TZ_FORMATNLS_TIMESTAMP_TZ_FORMATNLS_DUAL_CURRENCYNLS_COMPNLS_LENGTH_SEMANTICSNLS_NCHAR_CONV_EXCP还有chararcterset和nls_lang五、以上参数可以指定哪些值select * from v$nls_valid_values看看输出结果一、数据库级的参数设定先查看nls_database_parameters视图SQL> select * from nls_database_parameters;PARAMETER VALUE------------------------------ -------------------------------------------NLS_LANGUAGE AMERICANNLS_TERRITORY AMERICANLS_CURRENCY $NLS_ISO_CURRENCY AMERICANLS_NUMERIC_CHARACTERS .,NLS_CHARACTERSET ZHS16GBKNLS_CALENDAR GREGORIANNLS_DATE_FORMAT DD-MON-RRNLS_DATE_LANGUAGE AMERICANNLS_SORT BINARYNLS_TIME_FORMAT HH.MI.SSXFF AMNLS_TIMESTAMP_FORMAT DD-MON-RR HH.MI.SSXFF AMNLS_TIME_TZ_FORMAT HH.MI.SSXFF AM TZRNLS_TIMESTAMP_TZ_FORMAT DD-MON-RR HH.MI.SSXFF AM TZR NLS_DUAL_CURRENCY $NLS_COMP BINARYNLS_LENGTH_SEMANTICS BYTENLS_NCHAR_CONV_EXCP FALSENLS_NCHAR_CHARACTERSET AL16UTF16NLS_RDBMS_VERSION 9.2.0.1.020 rows selected.SELECT name,value$ from sys.props$ where name like '%NLS%'结果也是一样的,推荐第一种方案注意事项:A.如果数据库创建时没有在Init.ora指定nls参数,那么数据库将使用默认值amercian_americaB.如果instance级和session级没有nls参数,那么数据库也将使用默认的参数值C.不能在init.ora定义数据库字符集,只能通过create database 命令时指定,从oracle9i开始,数据库默认字符集为:us7ascii,国家字符集为al16utf16D.create database脚本可以参阅另外一篇文章(尚未完成)E.可以使用的更改数据库nls设置的命令有以下3个alter database character setalter database national character setalter database set time_zone=''将有后续的文章讨论命令的使用二、实例级的参数设定:通过nls_instance_paramters查看SQL> select * from nls_instance_parameters;PARAMETER VALUE------------------------------------------------------------ ---------------NLS_LANGUAGE AMERICANNLS_TERRITORY AMERICANLS_SORTNLS_DATE_LANGUAGENLS_DATE_FORMATNLS_CURRENCYNLS_NUMERIC_CHARACTERSNLS_ISO_CURRENCYNLS_CALENDARNLS_TIME_FORMATNLS_TIMESTAMP_FORMATNLS_TIME_TZ_FORMATNLS_TIMESTAMP_TZ_FORMATNLS_DUAL_CURRENCYNLS_COMPNLS_LENGTH_SEMANTICS BYTENLS_NCHAR_CONV_EXCP FALSE17 rows selected.等价于SELECT name,value from v$parameter where name like '%nls%';也可以用show parameter nls来查询,结果类似注意事项A.参数在init.ora设定可以用,alter system来修改B.如果参数没有通过以上2种方式显示指定,那么它的值不会由更高级的参数派生,例如nls_sort如果没有显示指定,那它的值不会由nls_language派生。

ORACLE字符集基础知识

ORACLE字符集基础知识

ORACLE字符集基础知识概念描叙ORACLE数据库有国家字符集(national character set)与数据库字符集(database character set)之分。

两者都是在创建数据库时需要设置的。

国家字符集主要是⽤于NCHAR、NVARCHAR、NCLOB类型的字段数据,⽽数据库字符集使⽤很⼴泛,它⽤于:CHAR、VARCHAR、CLOB、LONG类型的字段数据;ORACLE的字符集名字⼀般由以下部分组成:语⾔或区域、表⽰⼀个字符的⽐特位数、标准字符集名称(可选项,S或C,表⽰服务器或客户端)。

ORACLE字符集UTF8与UTFE不符合此规定,其它基本都是这种格式。

NLS_LANG=<Language>_<Territory>.<Clients Characterset>set nls_lang=AMERICAN_AMERICA.UTF8set nls_lang=SIMPLIFIED CHINESE_AMERICA.UTF8NLS( National Language Support)国家语⾔⽀持。

NLS是数据库的⼀个⾮常强⼤的特性,它控制着数据的许多⽅⾯:⽐如数据如何存储,⼀般来说它控制着以下两个⽅⾯:⽂本数据持久存储在磁盘上时如何编码透明的将数据从⼀个字符集转换到另外⼀个字符集。

假设你在数据库中⽤WE8ISO8859P1 字符集存储8 位的数据,但是你的某些客户使⽤的是⼀种7 位字符集,如US7ASCII字符集转换过程通常会修改数据,⽽你往往会把⼀个较⼤的字符集(在此例中就是8 位字符集)映射到⼀个较⼩的字符集(此例中的7 位字符集)。

这是⼀种有损转换(lossy conversion),字符就会被修改,这只是因为:较⼩的字符集不可能表⽰较⼤字符集中的每⼀个字符。

但是这种转换必须发⽣。

这也是乱码产⽣的原因。

如果数据库以⼀种单字节字符集存储数据,但是客户(如⼀个Java 应⽤,因为Java 语⾔使⽤Unicode)希望数据采⽤多字节表⽰,就必须执⾏转换,只有这样客户应⽤才能使⽤这些数据。

mysql和Oracle数据类型对照

mysql和Oracle数据类型对照

mysql和Oracle数据类型对照MySQL与Oracle两种数据库在⼯作中,都是⽤的⽐较多的数据库,由于MySQL与Oracle在数据类型上有部分差异,在我们迁移数据库时,会遇上⼀定的⿇烦,下⾯介绍MySQL与Oracle数据库数据类型的对应关系。

⼀、常见数据类型在MySQL与Oracle数据库中的表现形式说明mysql oracle变长字符串VARCHAR[0-65535]定义长度默认按字符长度计算,如果是GBK编码的汉字将占⽤2个字节VARCHAR2[1-4000]VARCHAR是VARCHAR2的同义词定义默认按字节长度计算整数TINYINT(-128-127)SMALLINT(-32768-32767)MEDIUMINT(-8388608-8388607)INT(-2147483648-2147483647)BIGINT(-9223372036854775808-9223372036854775807)⽆专⽤类型,TINYINT可以⽤NUMBER(3,0)代替SMALLINT可以⽤NUMBER(5,0)代替MEDUIMINT可以⽤NUMBER(7,0)代替INT可以⽤NUMBER(10,0)代替BIGINT可以⽤NUMBER(20,0)代替ORACLE中有SMALLINT,INT,INTEGER类型,不过这是NUMBER(38,0)的同义词数值类型DECIMAL[1-65[,0-30]]NUMERIC是DECIMAL的同义词NUMBER 可表⽰数范围: 1*10^-130⾄1*10^126NUMBER([1-38][,-84-127])DECIMAL、NUMERIC、DEC是NUMBER的同义词浮点型FLOAT(D,M)oracle10g开始增加BINARY_FLOAT类型10g以前⽆专⽤类型,可以⽤NUMBER代替ORACLE中有FLOAT和REAL类型,不过这是NUMBER的同义词双精度浮点型DOUBLE(D,M)oracle10g开始增加BINARY_DOUBLE类型10g以前⽆专⽤类型,可以⽤NUMBER代替ORACLE中有DOUBLE PRECISION类型,不过这是NUMBER的同义词位类型BIT(1-64)⽆DATE,3字节存储,只存储⽇期,没有时间,⽀持范围是[1000-01-01]⾄[9999-12-31]TIME,3字节存储,只存储时⽇期类型TIME,3字节存储,只存储时间,没有⽇期,⽀持范围是[-838:59:59]⾄[838:59:59]DATETIME,占8字节存储,可表⽰⽇期和时间,⽀持范围是[1000-01-01 00:00:00]⾄[9999-12-31 23:59:59]TIMESTAMP,占4字节存储,可表⽰⽇期和时间,范围是[1970-01-01 00:00:00]⾄[2038-01-19 03:14:07]DATE类型7字节存储,可表⽰⽇期和时间,⽀持范围是[-4712-01-01 00:00:00]⾄[9999-12-31 23:59:59]⾼精度⽇期5.6.4以前不⽀持⼩数秒精度5.6.4开始TIME,DATETIME,TIMESTAMP⽀持,最多可以6位⼩数秒,也就是微秒级别TIMESTAMP[0-9]占⽤空间7-11个字节,当⼩数秒精度为0时与DATE类型相同,⼩数秒最⾼精度可达9位,也就是纳精度年份份,⽀持范围是[1901]⾄[2155]⽆对应类型,可以⽤NUMBER(3,0)代替定长字符串CHAR[0-255],定义长度默认按字符长度计算,最⼤保存255字符CHAR[1-2000]定义默认按字节长度计算⽆符号说明⽀持,⽤于数值类型不⽀持⼤字符串,⼀般⽤于存储⽂本⽂件或超⼤描述及备注类信息TINYTEXT 最⼤⽀持255个字节TEXT最⼤⽀持65535个字节MEDIUMTEXT最⼤⽀持16MB个字节LONGTEXT最⼤⽀持4GB字节字段不⽀持默认值⽀持(CLOB)oracle10g以前最⼤⽀持4GB个字节oracle10g开始最⼤⽀持4GB个数据块,数据块⼤⼩为2KB-32KBoracle还有⼀个LONG类型,是早期的存储⼤字符串类型,最⼤⽀持2GB字节,现已不推荐使⽤⼆进制对象,⼀般⽤于存储⽂件或图⽚数据TINYBLOB 最⼤⽀持255个字节BLOB最⼤⽀持65535个字节MEDIUMBLOB最⼤⽀持16MB个字节LONGBLOB最⼤⽀持4GB字节字段不⽀持默认值⽀持(BLOB)oracle10g以前最⼤⽀持4GB个字节oracle10g开始最⼤⽀持4G个数据块,数据块⼤⼩为2KB-32KBoracle还有⼀个LONGRAW类型,是早期的存储⼆进制类型,最⼤⽀持2GB字节,现已不推荐使⽤⼆进制信息BINARY(0-255),定长VARBINARY(0-65535),变长RAW(1-2000)枚举类型ENUM(v1,v2,v3,...),最多65535个元素不⽀持集合类型SET(v1,v2,v3,...),最多64个元素不⽀持国际化字符集类型,较少使⽤⽆,MYSQL可以对每个字段指定字符编码⽀持NCHAR(1-2000) NVARCHAR(1-4000)外部⽂件指针类型不⽀持⽀持⽂件⼤⼩最⼤4GB⽂件名称最长255字符不⽀持⽀持⾃动增长类型⽀持使⽤简单不⽀持⼀般使⽤SEQUENCE解决,⽤法与⾃增类型差别较⼤,使⽤较复杂,但能实现⾮常灵活的应⽤,包括字符⾃增主键、全局主括字符⾃增主键、全局主键等等不⽀持函数和表达式TEXT和BLOB字段类型不⽀持默认值⽀持函数和表达式⽀持,例如,把emp表的id字段顺序放在name字段后⾯:alter table emp modify column id varchar(20) after name;不⽀持,只能重建表或字段虚拟字段是⼀个逻辑字段定义,其结果值通常是⼀个表达式,并在表中存储物理值,不占⽤空间,主要⽤于简化查询逻辑。

选择ORACLE数据库字符集

选择ORACLE数据库字符集

选择ORACLE数据库字符集如何选择数据库的字符集是⼀个有争议的话题,字符集本⾝涉及的范围很⼴,它与应⽤程序、客户的本地环境、操作系统、服务器等关系很密切,因此要做出合适的选择,需要明⽩这些因素之间的关系。

另外对字符集的基本概念,ORACLE数据库字符集的⼀些知识也需要了解。

随着国内的软件产品逐步⾛向海外,对于多语⾔的⽀持已经成为软件的⼀个基本要求,采⽤UNICODE标准也逐渐成为通⽤的设计⽅案,此时ORACLE数据库的字符集应该如何选择?很多⼈都有⾃⼰的见解,在⽹上也可以看到很多关于字符集的⽂章。

这些⽂章有很多精华值得去学习,但是另⼀⽅⾯还存在⼀些错误,尤其对UNICODE,存在⼀些概念不清的地⽅。

数据库字符集的选择并不存在绝对意义上的正确或错误,每种字符集都有它适⽤的环境。

对于我们来说,了解得越多,越能帮助⾃⼰做出适当地选择,⽽且可以采取措施去主动防范或规避可能出现的问题。

反之,如果数据库字符集选择不恰当,会给后⾯的⼯作带来很多的⿇烦,需要花费很多时间和精⼒去解决问题,有些问题甚⾄会影响到客户的业务使⽤。

本⽂希望可以给⼤家提供⼀些相对全⾯的知识,⽅便⼤家了解数据库字符集的相关概念,因此有些繁琐,请⼤家见谅。

另外由于个⼈的局限,有何不妥之处还请⼤家不吝指正。

下⾯我们由浅⼊深,先由概念⼊⼿,再给出⼏种常⽤的字符集设置建议,对⼀些可能遇到的问题做出分析,最后给出⾃⼰的建议。

1、字符集的⼀些基本知识讲到数据库的字符集设置,⾸先需要对字符集的知识有些了解。

以下是字符集的基本知识介绍:由于计算机只能存储使⽤⼆进制数据,因此对于⼀些字符或符号,需要对它们进⾏编码,⽤编码后的数值来表⽰这些字符。

对于⼀组符号的编码集合就是字符集。

字符集有很多种,最初的字符集是ASCII,它⽤⼀个字节中的7位来表⽰128个字符,第8位没有使⽤。

它包括⼤⼩写字母、数字0-9、标点符号、⾮打印字符(换⾏符、制表符等4个)以及控制字符(退格、响铃等)等。

Oracle字符集

Oracle字符集

【数据库】Oracle字符集字符集计算机处理信息,是用数字来代替字符和图形的. 所以,字符集编码就是用数字来代替字符和图形,并且计算机或终端可以显示和接收。

这些信息存储到数据库中必须遵循一定的编码规则,不同的字符集支持不同的字符存储。

所谓字符集,就是按照一定的字符编码方案,对一组特定的符号,分别赋予不同数值编码的集合。

字符集最早的编码方案来自于与ASCII。

这也是我们最常见的编码方式。

该方案起源于1960年代初期,最初是美国国会图书馆制定用来作为美国图书馆界书目交换的共同标准,最后完善成为美国的国家标准ASCII。

ORACLE支持许多国家和地区以及供应商的编码标准。

Oracle数据库最早支持的编码方案也就是US7ASCII字符集的命名规则字符集的命名规则是:<语言><比特位数><编码>比如: ZHS16GBK表示采用GBK编码格式、16位(两个字节)简体中文字符集.其中 AL代表 ALL,指适用于所有语言(All Languages),按照这个标准当年UTF-8本应被命名为AL32UTF8。

字符集编码方案1、单字节编码字符集:1)单字节7位字符集可以定义128个字符,最常用的字符集为 US7ASCII。

2)单字节8位字符集可以定义256个字符,适合于欧洲大部分国家例如:WE8ISO8859P1(西欧、8位、ISO标准8859P1编码 )。

这些字符集编码远远不能满足计算机发展的需要,对于亚洲国家复杂的字符存储需要更多的码位,于是各种编码方案随之而生。

2、多字节编码字符集1)固定长度多字节字符集每一个字符都使用固定长度字节的编码方案,至少是两个字节编码ORACLE10g唯一支持 Unicode 3.2 UTF-16 Universal character set (AL16UTF16).2)变长多字节编码某些字符用一个字节表示,其它字符用两个或多个字符表示,变长多字节编码常用于对亚洲语言的支持,例如日语、汉语、印地语等Shift-JIS 16-bit Japanese (JA16SJIS)HP CCDC 16-bit Traditional Chinese (ZHT16CCDC)MS Windows Code Page 950 with Hong Kong Supplementary Character Set HKSCS-2001 (ZHT16HKSCS)Unicode 3.2 UTF-8 Universal character set (AL32UTF8),zhs16gbk3、unicode编码-通用字符集为了容纳全世界各种语言的所有字符和符号,解决不同编码之间的兼容和转换问题,1991年元月,10多家公司共同出资,组建Unicode协会,随后Unicode编码产生了。

Oracle支持的数据类型

Oracle支持的数据类型

Oracle⽀持的数据类型
1. 字符型
Char:定长最⼤2000字符。

如char(10),当填⼊’abc’不⾜10个字符时,⾃动⽤空格填充剩余部分。

较浪费空间,但查询速度快。

Varchar2:可变长最⼤4000字符。

如varchar(20),当填⼊’abc’时,占⽤空间3个字符,剩余的部分不占⽤。

节省空间,但查询会⽐较慢。

Clob(character large objiect):⽤于存储字符型⼤对象(如⼀篇⽂章),最⼤4G。

2. 数字型
Number 范围-10ˆ38 -10ˆ38。

可以是表⽰整数,也可以表⽰⼩数
Number(5,2)表⽰⼀个⼩数有5为有效数字,2为⼩数
Number(5)表⽰⼀个5为整数
3. ⽇起类型
Date :包含年⽉⽇时分秒
Timestamp:是对date的扩展,精确到⼩数秒(毫秒级),⽤的较少
4. ⽂件存储类型
Blob:⼆进制数据可⽤于存储图⽚、声⾳、视频等最⼤4G。

注:⼀般⽂件很少会往数据库⾥放,⼀般会放到⽂件夹内,数据库⾥放⽂件路径。

但对于⼀些安全性要求⾮常的⽂件往往会⽤到。

表名和别的命名规则
1. 必须以字母开头
2. 长度不能超过30字符
3. 不能使⽤oracle的保留字
4. 只能使⽤如下字符:A-Z,a-z,0-9,$,#等。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
相关文档
最新文档