1. NVARCHAR2
NVARCHAR2 数据类型是纯 Unicode 数据类型。创建包含 NVARCHAR2 列的表时,您需要提供它可以容纳的最大字符数。Oracle 随后将按照您指定的方式将每个值存储在列中,前提是该值不超过列的最大长度。列的最大长度由国家字符集定义确定。
要查找数据库中的字符集NVARCHAR2,请使用以下查询:
SELECT
*
FROM
nls_database_parameters
WHERE
PARAMETER = 'NLS_NCHAR_CHARACTERSET';
在我们的Oracle数据库服务器中,NVARCHAR2数据类型使用AL16UTF16,以UTF-16编码对Unicode数据进行编码的字符集。使用AL16UTF16,2个字节来存储一个字符。
存储NVARCHAR2可变长度字符数据。当您创建包含列的表时NVARCHAR2,最大大小始终采用字符长度语义,这也是该NVARCHAR2数据类型的默认且唯一的长度语义。
字符数据类型 NVARCHAR2 的宽度规范是指字符数。允许的最大列大小为 4000 字节,2000字符。有关 Unicode 数据类型支持的信息,请参阅 Oracle 数据库全球化支持指南。
NVARCHAR2示例 以下语句创建一个表,其中的NVARCHAR2列的最大长度为 50 个字符。
CREATE TABLE nvarchar2_demo (
description NVARCHAR2(50)
);
由于当前国家字符集是UTF-16,因此该description列的最大字节长度为200字节。
请注意,最大字节长度是最大字符长度与每个字符的最大字节数的乘积。
以下语句向表中插入一行nvarchar2_demo:
INSERT INTO nvarchar2_demo
VALUES('ABCDE');
我们使用该DUMP()函数来查找表中存储的值的详细信息nvarchar2_demo:
SELECT
description,
DUMP(description,1016)
FROM
nvarchar2_demo;
结果显示,数据类型代码为1,长度为10字节(5个字符,每个字符2个字节)。
2. VARCHAR2
VARCHAR2 数据类型指定可变长度字符串。创建 VARCHAR2 列时,您需要提供它可以保存的数据的最大字节数或字符数。Oracle 随后将按照您指定的方式将每个值存储在列中,前提是该值不超过该列的最大长度。如果尝试插入超过指定长度的值,Oracle 将返回错误。您必须指定 VARCHAR2 列的最大长度。VARCHAR2 数据的最大长度为 4000 字节。尽管允许存储的实际字符串是零长度字符串 (''),但该最大值必须至少为 1 个字节。
您可以使用 CHAR 限定符(例如 VARCHAR2(10 CHAR))来给出字符而不是字节的最大长度。从技术上讲,字符是数据库字符集的代码点。CHAR 和 BYTE 限定符会覆盖 NLS_LENGTH_SEMANTICS 参数的设置,该参数的默认值是字节。出于性能原因,Oracle 建议您使用 NLS_LENGTH_SEMANTICS 参数来设置长度语义,并且仅在需要覆盖该参数时才使用 BYTE 和 CHAR 限定符。
Oracle 使用非填充比较语义来比较 VARCHAR2 值。为了确保具有不同字符集的数据库之间的正确数据转换,必须确保 VARCHAR2 数据由格式正确的字符串组成。有关字符集支持的更多信息,请参阅 Oracle 数据库全球化支持指南。
3. VARCHAR2与NVARCHAR2
首先,VARCHAR2的最大大小可以是字节或字符,而NVARCHAR2的最大大小只能是字符。另外,NVARCHAR2的最大字节长度取决于配置的国家字符集。
其次,VARCHAR2列只能存储默认字符集中的字符,而列NVARCHAR2几乎可以存储任何字符
以下查询返回VARCHAR2数据类型使用的默认字符集。
SELECT
*
FROM
nls_database_parameters
WHERE
parameter = 'NLS_CHARACTERSET';
4. oracle 字符类型 VARCHAR
不要使用 VARCHAR 数据类型。请改用 VARCHAR2 数据类型。尽管 VARCHAR 数据类型目前与 VARCHAR2 同义,但与不同的比较语义相比,VARCHAR 数据类型计划被重新定义为用于可变长度字符串的单独数据类型。【注意】VARCHAR2是Oracle提供的特定数据类型,Oracle可以保证VARCHAR2在任何版本中该数据类型都可以向上和向下兼容。VARCHAR在Oracle中不建议使用。
5. mysql 字符类型 VARCHAR
- MySQL 5.0.3 之前:0--255字节,如:varchar(20)中的20表示字节数,如果存放utf-8编码的话只能放6个汉字。varchar(n),这里的n表示字节数。
- MySQL 5.0.3 之后:0--65535字节,varchar(20)表示字符数,不管什么编码,既汉字也能放20个。但最多占65532字节(两个字节存放长度,小于255字节用1个字节存放长度),varchar(n)这里的n表示字符数,比如varchar(200),不管是英文还是中文都可以存放200个。其他具体区别,可自行网上查询。
用来获取字符串长度的两个内置函数,这两个函数的区别是:
- length(): ,单位是字节,utf8编码下,一个汉字三个字节,一个数字或字母一个字节。gbk编码下,一个汉字两个字节,一个数字或字母一个字节。
- char_length():单位为字符,不管汉字还是数字或者是字母都算是一个字符。