mysql有没有varchar2

56次阅读
没有评论

共计 2420 个字符,预计需要花费 7 分钟才能阅读完成。

今天丸趣 TV 小编给大家分享一下 mysql 有没有 varchar2 的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。

mysql 没有 varchar2,只有 varchar。VARCHAR 代表可变长度的字符串,其长度可以达到 65,535 个字符;MySQL 将 VARCHAR 值作为 1 字节或 2 字节长度前缀加上实际数据。VARCHAR2 是 oracle 的类型,代表可变长度的字符串,可以存储 1 到 4000 字节的值,这意味着对于单字节字符集,最多可以在 VARCHAR2 列中存储 4000 个字符。

mysql 没有 varchar2,只有 varchar,oracle 有 varchar2,代表字节长度,能容纳多少个汉字和数据库的字符集有关。

mysql 的 varchar 类型

VARCHAR 是可变长度的字符串,其长度可以达到 65,535 个字符。MySQL 将 VARCHAR 值作为 1 字节或 2 字节长度前缀加上实际数据。

长度前缀指定值的字节数。如果列需要少于 255 个字节,则长度前缀为 1 个字节。如果列需要超过 255 个字节,长度前缀是两个长度字节。

但是,最大长度受到最大行大小 (65,535 字节) 和所使用的字符集的限制。这意味着所有列的总长度应该小于 65,535 字节。

下面我们来看一个例子。

创建一个新的表,它有两列 s1 和 s2,长度分别为 32765(长度前缀为 +2)和 32766(+2)。注意,32765 + 2 + 32766 + 2 = 65535,这是最大行大小。

USE testdb;
CREATE TABLE IF NOT EXISTS varchar_test ( s1 VARCHAR(32765) NOT NULL,
 s2 VARCHAR(32766) NOT NULL
) CHARACTER SET  latin1  COLLATE LATIN1_DANISH_CI;

该语句成功创建了表。但是,如果我们将 s1 列的长度增加 1。

USE testdb;
CREATE TABLE IF NOT EXISTS varchar_test_2 ( s1 VARCHAR(32766) NOT NULL, -- error
 s2 VARCHAR(32766) NOT NULL
) CHARACTER SET  latin1  COLLATE LATIN1_DANISH_CI;

MySQL 将发出错误消息:

Error Code: 1118. Row size too large. The maximum row size for the used table type, not counting BLOBs, is 65535. This includes storage overhead, check the manual. You have to change some columns to TEXT or BLOBs 0.000 sec

如上所示,行长度太大,所以创建语句失败。

如果插入长度大于 VARCHAR 列长度的字符串,MySQL 将发出错误。请考虑以下示例:

USE testdb;
CREATE TABLE items (
 id INT PRIMARY KEY AUTO_INCREMENT,
 title VARCHAR(3)
INSERT INTO items(title)
VALUES(ABCD

在这个例子中,MySQL 发出以下错误消息:

1406 - Data too long for column  title  at row 1

oracle 的 varchar2 类型

要存储可变长度的字符串,可以使用 Oracle VARCHAR2 数据类型。VARCHAR2 列可以存储 1 到 4000 字节的值。这意味着对于单字节字符集,最多可以在 VARCHAR2 列中存储 4000 个字符。

当使用 VARCHAR2 列创建表时,必须指定最大字符串长度(以字节为单位):

VARCHAR2(max_size BYTE)

或以字符 –

VARCHAR2(max_size CHAR)

默认情况下,如果没有在 max_size 之后显式指定 BYTE 或 CHAR,则 Oracle 使用 BYTE。换句话说,VARCHAR2(N)列最多可以容纳 N 个字节的字符。

如果存储大小超过 VARCHAR2 列最大长度的字符串,则 Oracle 发出错误。

例如,如果定义最大长度为 20 的 VARCHAR2 列,则在单字节字符集中最多可以存储 20 个字符。如果存储了 21 个或更多字符,则 Oracle 返回错误。

另外,如果在 VARCHAR2(20)列中存储 10 个字符,则 Oracle 仅使用 10 个字节进行存储,而不是 20 个字节。因此,使用 VARCHAR2 数据类型可以帮助您节省表使用的空间。

比较 VARCHAR2 值时,Oracle 使用非填充比较语义。

VARCHAR2 最大长度

从 Oracle 12c 开始,可以为 VARCHAR2 数据类型最大长度为:32767。Oracle 使用 MAX_STRING_SIZE 参数来控制最大长度。如果 MAX_STRING_SIZE 是 STANDARD,则 VARCHAR2 的最大大小是 4000 字节。如果 MAX_STRING_SIZE 为 EXTENDED,则 VARCHAR2 的大小限制为 32767。

要获取 MAX_STRING_SIZE 参数的值,请使用以下查询:

SELECT
 name,
 value
 v$parameter
WHERE
 name =  max_string_size

执行上面查询语句,得到以下结果 –

SHOW PARAMETER max_string_size;

以上就是“mysql 有没有 varchar2”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,丸趣 TV 小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注丸趣 TV 行业资讯频道。

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-07-13发表,共计2420字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)