Oracle数据库varchar2、nvarchar2和mysql的varchar之比较

2023年 12月 8日 35.6k 0

1. NVARCHAR2

NVARCHAR2 数据类型是纯 Unicode 数据类型。创建包含 NVARCHAR2 列的表时,您需要提供它可以容纳的最大字符数。Oracle 随后将按照您指定的方式将每个值存储在列中,前提是该值不超过列的最大长度。列的最大长度由国家字符集定义确定。

要查找数据库中的字符集NVARCHAR2,请使用以下查询:

SELECT
    *
FROM
    nls_database_parameters
WHERE
    PARAMETER = 'NLS_NCHAR_CHARACTERSET';

Oracle数据库varchar2、nvarchar2和mysql的varchar之比较

在我们的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;

Oracle数据库varchar2、nvarchar2和mysql的varchar之比较

结果显示,数据类型代码为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';

Oracle数据库varchar2、nvarchar2和mysql的varchar之比较

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():单位为字符,不管汉字还是数字或者是字母都算是一个字符。

Oracle数据库varchar2、nvarchar2和mysql的varchar之比较

相关文章

Oracle如何使用授予和撤销权限的语法和示例
Awesome Project: 探索 MatrixOrigin 云原生分布式数据库
下载丨66页PDF,云和恩墨技术通讯(2024年7月刊)
社区版oceanbase安装
Oracle 导出CSV工具-sqluldr2
ETL数据集成丨快速将MySQL数据迁移至Doris数据库

发布评论