CHAR与NCHAR在Oracle数据库是常用的类型,不过两种数据类型是互相不兼容的,这里大概简要谈一下这2种数据类型吧。

在Oracle中,CHAR类型是一种固定长度的字符串类型,最大长度是2000个byte,在这里要注意了,是2000个byte,并不是2000个字符的意思。1个字符在Oracle中可能是1个byte到4个byte不等,这个要看数据库的设置了。这个是数据库中有一个参数NLS_LENGTH_SEMANTICS来决定的。CHAR类型有一个特点,就是字符长度总是固定的,也就是说,如果你声明了一个COLUMN类型为CHAR(10),如果你只插入了1个字符,那么系统也会自动在这个字符的右边补上9个空格,Oracle的CHAR类型中,补空格是在右侧补的。但是如果你插入了11个字符,那么就会系统出错,而不会自动截成10个字符。

NCHAR数据类型可能不是经常见到,不过在许多数据库设计中也有了。NCHAR数据类型是专为UNICODE字符而设计的,而且只能插入UNICODE字符串,NCHAR也是最大长度为2000个byte,不过每个字符占多少个byte,是由数据库的国际字符集决定的。同样的,如果插入字符不足定义的长度,比如NCHAR(10)类型中只插入了1个字符,系统会自动在右侧补充9个空格。

NCHAR和CHAR之间是不能直接互相兼容的,而是要通过Oracle的函数或者语法进行转换,比如说从NCHAR转成CHAR是要用TO_CHAR函数进行转换,而CHAR转换为NCHAR,比如说'ABCDE'这个CHAR字符串,则要通过N'ABCDE'来进行表示,也就是说前面要有一个N这个特殊字符,表示是NCHAR类型。

CREATE PROC p_ToUnicode @type tinyint=0 --修改方式,0=仅查询可修改情况,1=仅所有列可修改时才修改,2=修改可修改列,报告不可修改列 SET NOCOUNT ON --查询非unicode列转换为unicode列的可行性 SELECT TableName=o.name,FieldName=c.name, FieldType=t.name+N'( SQL> create table test_ char (name char (2000));Table createdSQL> insert into test_ char values('test');1 row... 在本教程 将学习 Oracle CHAR 数据类型 ,它是一种固定长度的字符串类型。 Oracle CHAR 数据类型 简介 Oracle CHAR 数据类型 用于存储固定长度的字符串。 CHAR 数据类型 可以存储1到2000字节的字符串。要定义一个 CHAR 列,需要用字节或字符来指定一个字符串长度,如下所示: CHAR (length BYTE ) CHAR (length CHAR )如果没有明确指定 BYTE CHAR ,那么O... ORACLE 字符类型详解---- char 、n char 、var char 、var char 2、nvar char 2  转载自:http://www.2cto.com/database/201310/252696.html oracle 提供了五种字符 数据类型 char 、n char 、var char 、var char 2、nvar char 2。 char :使用 数据库 字符集来存储数据, 在 Oracle 数据表和程序类型 ,字符类型可能是使用最多的一种了。从历史上看, Oracle 首先推出了固定长度 char 类型字段,之后才推出了变长度类型var char 2。目前,主流 Oracle 应用开发都已经普遍接受了var char 2作为数据表字段类型表示。如果存在超长字符,都考虑使用CLOB这类大对象进行存储。但是,我们在实际领域 ,还是会在各种遗留系统 发现很多 char 类型字段。而且连带这些遗留系统... 尽量避免使用 Oracle char 类型,即使只有一个字节,也应该使用var char 2类型。 char 的缺点主要有两个1.占用空间大 , 如果声明一个 char (10)的字段,仅仅使用了一个字节,剩余的9个字节也会使用空格补齐。2.Java 回查不到数据,在下面最常用的JDBC ,查询一个 char 类型的字段,却查不到任何结果. 不论在表段还是索引段 CHAR 都会占用最大的存储空间,这就够糟糕了,避免使用 CHAR /N CHAR 类型还有另外一个很重要的原因: CHAR /N CHAR 类型还会给使用这些数据的应用带来混乱,原因与字符串的比较的规则有关,也与执行字符串比较多严格程度有关。使用诸如UTF-8的多字节字符集时,建议在VAR CHAR 2/ CHAR 定义 使用 CHAR 修饰符,也就是说使用VAR CHAR 2(80 CHAR ),而不是VAR CHAR 2(80),因为是要定义一个实际上能存储80字符数据的列。 1 Oracle 数据类型 1.1字符类型 字符串 数据类型 还可以依据存储空间分为固定长度类型( CHAR ) 和可变长度类型(VAR CHAR 2/NVAR CHAR 2)两种。 1.1.1 CHAR 类型 CHAR 类型,定长字符串,会用空格填充来达到其最大长度。非 NULL 的 CHAR (12)总是包含 12 字节信息。 CHAR 字段最多可以存储 2,000 字节的信息。如果创建表时,不指定 CHAR 长度,则默认为 1。 1.1.2VAR CHAR 2 类型 今天在做一个前台查询功能的时候,需要从 数据库 查询一些数据,显示在前台的jsp页面上,然会自己就写了一个SQL,在Oralce 数据库 上运行一下,看看是否能查询出数据,结果是没有查询到数据,找个一个上午的问题,终于找到了查询不到数据的问题所在,在我写的查询SQL 包含了一个left  join的左连接查询,问题就出在这个左连接查询的连接字段上。 查询不到数据的原因在于 连接的字段的 数据类型 不一样, 数据库 char ,var char ,n char 类型区别1、 char 类型是一个字节 char (8)只能存8字母, char 定长,不足长度加SPACE2、n char 类型是双字节 n char (8)能存8个汉字,n char 能包含汉字,包含 n 个字符的固定长度 Unicode 字符数据。3、var char 类型是可变的、即如果 var char (8)你只存了一个字母、在内存 只占一个字节,var char 可...