MYSQL数据库表字段类型(二)

文本字符串类型

链接
整数类型,浮点数类型和定点类型
二进制字符串类型

字符串类型用来存储字符串数据,除了可以在存储字符串数据之外,还可以存储其他数据,比如图片和声音的二进制数据。(MySQL还支持两类字符型数据:文本字符串类型。文本字符串二进制字符串)

表一
类型名称说明存储需求
CHAR(M)固定长度非二进制字符串M字节,1<=M<=255
VARCHAR(M)变长非二进制字符串L+1字节,在此L<=M和1<=M<=255
TINYTEXT非常小的非进制字符串L+1字节,在此L<28
TEXT小的非二进制字符串L+2字节,在此L<216
MEDIUMTEXT中等大小的非二进制字符串L+3字节,在此L<232
ENUM枚举类型,只能一个枚举字符串值1或2字节,取值于枚举值的数目(最大值为65535)
SET一个设置,字符串对象可以有零个或多个SET成员1,2,3,4或8字节,取值于集合成员的数量(最多为64个成员)

上面的L是实际长度

VARCHAR和TEXT类型都是边长类型,其存储需求取决于列值的实际长度(前面的表格中用L表示),而不是取决于类型的最大可能尺寸。例如,一个VARCHAR(10)列能保存最大长度为10个字符的字符串,实际的存储需要是字符串的长度L加上1字节(记录字符串的长度)。对于字符"abcd",L是4而存储要求是5字节。

CHAR和VARCHAR类型

  1. CHAR(M)为固定长度字符串,在定义时指定字符串列长。当保存时在右侧填充空格,以达到指定的长度。M表示列长度,M的范围时0~255个字符。例如
    ,CHAR(4)定义了一个固定长度的字符串列,其包含的字符个数最大为4。当检索到CHAR值时,尾部的空格将被删除。

  2. VARCHAR(M)是长度可变的字符串,M表示最大列长度。M的范围是0-65535。VARCHAR的最大实际长度由最长的行的大小和使用的字符集确定,而实际占用的空间为字符串的实际长度加1。例如,VARCHAR(M)是长度可变的字符串,M表示最大列长度。M的范围是0-65535。VARCHAR的最大实际长度由最长的行的大小和使用的字符集确定,而实际占用的空间为字符串的实际长度加1。例如,VARCHAR(50)定义了一个最大长度为50的字符串,如果插入的字符串只有10个字符,则实际存储的字符串为10个字符和一个字符串结束字符。VARCHAR在值保存和检索时尾部的空格仍保留。

下面用不同字符串保存到CHAR(4)与VARCHAR(4)存储区别

表二
插入值CHAR(4)存储需求VARCHAR(4)存储需要
‘’‘\s\s\s\s’4字节‘’1字节
‘ab’‘ab\s\s’4字节‘ab’3字节
‘abc’‘abc\s’4字节‘abc’4字节
‘abcd’‘abcd’4字节‘abcd’4字节
‘abcdf’‘abcd’4字节abcd4字节

从上表可以看出,不管插入的长度为多少,占用的空间均为4个字节;VARCHAR定义的列所占字节数均为实际长度+1。

CHAR和VARCHAR取出时的区别

表二中最后一行的值只有在使用"不严格"模式时,字符串才会被截断插入;如果MYSQL运行在’严格’,超过列长度的值不会被保存,并且会出现错误信息 “ERROR 1406(22001)”:Data too long for column",
在这里插入图片描述
设置严格模式 set session 只在当前操作界面有效 set global 全局有效,全局设置。 ​set session sql_mode =‘STRICT_TRANS_TABLES’ 修改完之后退出当前客户端重新登陆即可。

TEXT类型
TEXT列保存非二进制字符串,如文章内容,评论等。当保存或查询TEXT列的值时,不删除尾部空格。
TEXT类型分为4种:TINYTEXT,TEXT,MEDIUMTEXT和LONGTEXT。不同的TEXT类型存储空间和数据长度不同。

  • TINYTEXT最大长度为255(28 -1)字符的TEXT列。
  • TEXT最大长度为65535(216 -1)字符的TEXT列。
  • MEDIUMTEXT最大长度为16777215(224 -1)字符的TEXT列。
  • MEDIUMTEXT最大长度为16777215(224 -1)字符的TEXT列。
  • LONGTEXT最大长度为4294967295(232 -1)或4GB字符的TEXT列。

ENUM类型

ENUM是一个字符串对象,其值为表创建时在列规定中枚举的一列值。语法格式如下:

字段名 ENUM('值1''值2',......'值n')

先创建一张测试表
在这里插入图片描述
再插入数据
在这里插入图片描述
然后取出数据
在这里插入图片描述
定义改ENUM类型的列(‘ZHANGSAN’,‘LISI’,‘WANGWU’),改列可以取的值和每个值的索引如表三所示

表三
索引
NULLNULL
‘’0
ZHANGSAN1
LISI2
WANGWU3

ENUM值依照索引顺序排列,并且空字符串排在非空字符串前,NULL值排在其他所有的枚举值前。

ENUM类型的字段在取值时,只能在指定的枚举列表中取,而且一次只能取一个。创建的成员中有空格时,其尾部的空格将自动被删除。ENUM值在内部用整数表示,并且每个枚举值均有一个索引值:列表值所允许的成员值从1开始编号,MYSQL存储的就是这个索引编号。枚举最多可以有65535个元素。
ENUM列总有一个默认值:如果将ENUM列声明为NULL,NULL值则为该列的一个有效值,并且默认为NULL;如果ENUM列被声明为NOTNULL,其默认值为允许的值列表的第一个元素。

SET

SET是一个字符串对象,可以有零或多个值。SET列最多可以有64个成员,其值为表创建时规定的一列值。指定包括多个SET成员的SET列值时,各成员之间用逗号(,)间隔开。语法格式如下:

SET ('值1''值2'......'值n')

与ENUM类型相同,SET值在内部用整数表示,列表中每一个值都有一个索引编号。当创建表时,SET成员值的尾部空格将自动被删除。与ENUM类型不同的是,ENUM类型的字段只能从定义的列值中选择一个值插入,而SET类型的列可从定义的列值中选择多个字符的联合。

在这里插入图片描述

如果插入SET字段列值有重复,则MYSQL自动删除重复的值;插入SET字段的值的顺序不重要,MYSQL会存入数据库时按照定义的顺序显示;如果插入了不正确的值,默认情况下,MYSQL将忽视这些值,并给出警告。

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值