-3

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

4

1 回答 1

4

首先varchar是用在MySQLvarchar2中,用在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 数据类型列。

于 2013-01-07T06:00:25.730 回答