点击蓝色字关注“SQL数据库运维”,回复“SQL”获取2TB学习资源!
Oracle CHAR数据类型概述
Oracle CHAR数据类型用于存储固定长度的字符串。CHAR数据类型可以存储1到2000字节的字符串。
要定义一个CHAR列,需要用字节或字符来指定一个字符串长度,如下所示:
CHAR(length BYTE)CHAR(length CHAR)
如果没有明确指定BYTE或CHAR,那么Oracle会默认使用BYTE。
column_name CHAR
下面来看看一些例子来理解CHAR数据类型的工作原理。
首先,创建一个由CHAR列(x)和VARCHAR2列(y)组成的新表t 。每列的长度是10个字节。
CREATE TABLE t (x CHAR(10),y VARCHAR2(10));
其次,用x和y列的相同数据在t表中插入一个新行:
INSERT INTO t(x, y )VALUES('Oracle', 'Oracle');
第三,通过使用以下查询验证插入:
SELECT * FROM t;
执行上面示例代码,得到以下结果:

以下语句从t表中检索数据:
SELECTx,DUMP(x),y,DUMP(y)FROMt;
执行上面查询代码,得到以下结果:

在这个例子中,使用了DUMP()函数来返回x和y列的详细信息:
如果使用LENGTHB()函数来获取x和y列使用的字节数,则更加清楚:
SELECTLENGTHB(x),LENGTHB(y)FROMt;

CREATE TABLE nchar_demo (description NCHAR(10));
在本例中,description 列的最大长度是10个字符。对于NCHAR列的最大大小,不可能使用字节长度,执行不成功,如下所示:
CREATE TABLE nchar_demo (description NCHAR(10 BYTE) -- not possible);
NCHAR列的最大字节长度取决于当前的国家字符集。它是每个字符中最大字符长度和最大字节数的乘积。
要查找当前的国家字符集,请使用以下语句:
SELECT*FROMnls_database_parametersWHEREPARAMETER = 'NLS_NCHAR_CHARACTERSET';
执行上面查询语句,得到类似下面的结果:

AL16UTF16字符集使用2个字节存储一个字符,所以description 列的最大字节长度为20个字节。
首先,NCHAR的最大长度只在字符长度语义上,而CHAR的最大长度可以是字符长度或字节长度语义。
其次,NCHAR将字符存储在国家默认字符集中,而CHAR将字符存储在默认字符集中。
以下语句返回由CHAR使用的默认字符集和由NCHAR使用的默认国家字符集:
SELECT*FROMnls_database_parametersWHEREPARAMETER IN('NLS_CHARACTERSET','NLS_NCHAR_CHARACTERSET');
执行上面查询语句,得到以下结果(因环境不同而不同):

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

点击关注“SQL数据库运维”,后台或浏览至公众号文章底部点击“发消息”回复关键字:进群,带你进入高手如云的技术交流群。后台回复关键字:SQL,获取学习资料。
动动小手点击加关注呦☟☟☟




