加入收藏 | 设为首页 | 会员中心 | 我要投稿 520站长网 (https://www.520shu.cn/)- 智能内容、图像分析、图像处理、运维、办公协同!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

mysql有无varchar2

发布时间:2023-05-29 21:30:30 所属栏目:MySql教程 来源:转载
导读:   给大家分享一下mysql有没有varchar2的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下
  给大家分享一下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
 
  FROM
 
      v$parameter
 
  WHERE
 
      name = 'max_string_size';
 
  执行上面查询语句,得到以下结果 -
 
  SHOW PARAMETER max_string_size;
 

(编辑:520站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章