不同数据库的 Varchar 和 Varchar2 的最大大小/长度

use*_*079 -2 mysql sql oracle postgresql

VARCHAR 和 VARCHAR2 的大小限制在不同的 SQL RDBMS 实现中是不同的还是相同的?感谢帮助。

jsi*_*ist 5

首先varchar是在MySQL中使用,然后varchar2是在Oracle中使用。此外,varchar 和 varchar2 的大小和限制在不同数据库中也有所不同。

参考自:http ://docs.oracle.com/cd/E12151_01/doc.150/e12155/oracle_mysql_compared.htm

MySQL 和 Oracle 在支持的字符类型以及存储和检索字符类型值的方式方面存在一些差异。

对于长度小于 65,535 字节的字符类型,MySQL 支持 CHAR 和 VARCHAR 类型。CHAR 类型的最大长度为 255 字节,从 MySQL 3.23 开始,它也可以声明为 0 字节的长度。在MySQL 5.0.3之前,VARCHAR类型的长度规范与CHAR类型相同。从 MySQL 5.0.3 开始,VARCHAR 类型的最大长度为 65,535 字节。Oracle 支持四种字符类型:CHAR、NCHAR、NVARCHAR2 和 VARCHAR2。所有 Oracle 字符类型可以声明的最小长度是 1 个字节。CHAR 和 NCHAR 允许的最大大小为 2,000 字节,NVARCHAR2 和 VARCHAR2 允许的最大大小为 4,000 字节。

MySQL CHAR 值在存储时用空格右填充至指定长度,并且在检索值时删除尾随空格。另一方面,VARCHAR 值使用给定的尽可能多的字符来存储,但在 MySQL 5.0.3 之前,存储和检索值时会删除尾随空格。如果该值短于列长度,Oracle 会将其 CHAR 和 NCHAR 类型的值空白填充到列长度,并且在检索时不会删除尾随空格。对于 NVARCHAR2 和 VARVHAR2 数据类型列,Oracle 完全按照给定的方式存储和检索值,包括尾随空格。

如果为字符类型列分配的值超过其指定长度,则 MySQL 会截断该值并且不会生成错误,除非设置了 STRICT SQL 模式。如果分配给字符类型列的值超过其指定长度,Oracle 会生成错误。

在 MySQL 中,每个字符类型(CHAR、VARCHAR 和 TEXT)列都有一个列字符集和排序规则。如果列定义中未显式定义字符集或排序规则,则隐含表字符集或排序规则(如果指定);否则,选择数据库字符或排序规则。在 Oracle 中,CHAR 和 VARCHAR2 类型的字符集由数据库字符集定义,而 NCHAR 和 NVARCHAR 类型的字符集由国家字符集定义。

在 MySQL 中声明 CHAR 或 VARCHAR 类型时,对于 MySQL 4.1 及更高版本,默认长度语义是字符而不是字节。在 Oracle 中,CHAR 和 VARCHAR2 类型的默认长度语义是字节,NCHAR 和 NVARCHAR2 类型的默认长度语义是字符。

SQL Developer 将分别将 MySQL CHAR 和 VARCHAR 类型映射到 Oracle CHAR 和 VARCHAR2 类型。SQL Developer 将根据保存为相应 MySQL CHAR 和 VARCHAR 数据类型列指定的最大长度所需的字节数来确定 Oracle CHAR 和 VARCHAR2 数据类型列的最大字节数。如果 MySQL VARCHAR2 列的数据超过 4000 字节,请将该列转换为 Oracle CLOB 数据类型列。