mysql的数据类型及应用

x33g5p2x  于2022-02-09 转载在 Mysql  
字(2.7k)|赞(0)|评价(0)|浏览(408)

mysql的数据类型及应用

一、数据类型

1.整型

类型所占字节范围(有符号)范围(无符号)用途
tinyint[unsigned]1 Bytes(-128,127)(0,255)小整数值
smallint[unsigned]2 Bytes(-215,215 -1)(0,216-1)大整数值
mediumint[unsigned]3 Bytes(-223,223-1)(0,224-1)大整数值
int[unsigned]4 Bytes(-231,231-1)(0,232-1)大整数值
bigint[unsigned]8 Bytes(-263,263-1)(0,264-1)极大整数值

注意:

  • 默认整数类型是带符号的,即可以有正负值
# 带符号
create  table  zhengxing1(num1  int, num2  tinyint);

# 不带符号的设置如下
create  table  zhengxing2(num1  int  unsigned, num2  tinyint  unsigned);
  • int(11)这里的11不表示限制 int 的长度为 11 位,而是字符的显示宽度无论你显示宽度设置为多少,int 类型能存储的最大值和最小值永远都是固定的

2.小数型

类型含义
float[(m,d)] [unsigned]单精度浮点型 8位精度(4字节) ,约7位有效数字,m总个数,d小数位
double[(m,d)] [unsigned]双精度浮点型 16位精度(8字节) ,约17位有效数字,m总个数,d小数位
decimal[(m,d)] [unsigned]定点数m表示该小数的总的有效位数(最大65),d表示小数点的位数

3.日期类型

类型所占字节范围格式用途
date3 Bytes1000-01-01/9999-12-31YYYY-MM-DD日期值
time3 Bytes‘-838:59:59’/‘838:59:59’HH:MM:SS时间值或持续时间
year1 Bytes1901/2155YYYY年份值
datetime8 Bytes1000-01-01 00:00:00/9999-12-31 23:59:59YYYY-MM-DD HH:MM:SS混合日期和时间值
timestamp4 Bytes1970-01-01 00:00:00/2038YYYYMMDD HHMMSS混合日期和时间值,时间戳

4.字符串类型

类型所占字节用途
char0-255定长字符串
varchar0-65535变长字符串
tinyblob0-255不超过 255 个字符的二进制字符串
tinytext0-255短文本字符串
blob0-65 535二进制形式的长文本数据
text0-65 535长文本数据
mediumblob0-16 777 215二进制形式的中等长度文本数据
mediumtext0-16 777 215中等长度文本数据
longblob0-4 294 967 295二进制形式的极大文本数据
longtext0-4 294 967 295极大文本数据

定长字符类型char:

适用于存储的字符长度为固定长度的字符,比如中国邮政编码,中国身份证号码,手机号码等。

设定形式:字段名称 char(字符个数)

特点是:

1,存储的字符长度固定,最长可设定为255个字符。

2,如果实际写入的字符不足设定长度,内部会自动用空格填充到设定的长度。

3,相对varchar类型,其存取速度更快。
变长字符类型varchar

适用于存储字符长度经常不确定的字符,比如姓名,用户名,标题,内容,等大多数场合的字符。

设定形式:字段名称 varchar(字符个数)

特点是:

1,存储的字符长度是写入的实际长度,但不超过设定的长度。最长可设定为65532(字节)

2,如果实际写入的字符不足设定的长度,就按实际的长度存储。

3,相对于char字符串,其存取速度相对更慢。

注意:

由于其最长的限制是字节数,因此存储中文和英文的实际字符个数是不同的;

  • 英文:一个字符占一个字节;
  • 中文(gbk编码):一个字符占2个字节;
  • 中文(utf8编码):一个字符占3个字节;
    text长文本类型

适用于存储“较长的文本内容”,比如文章内容。最长可存储65535个字符。

设定形式:字段名称 text

注意:

  • text类型的字段不能设置默认值。
  • text类型虽然是字符类型,但不能设置长度
  • text类型的数据不存在行中
    注意:

char(n) 和 varchar(n) 中括号中 n 代表字符的个数,并不代表字节个数,比如 CHAR(30) 就可以存储 30 个字符。

一个表中的行也有一个“最大字节长度的限制”,一行最多存储65532字节。

二、应用

1.tinyint类型(-128~127)

create table user (num TINYINT);

insert INTO USER VALUES(66);

insert INTO USER VALUES(128);

发现只有一条数据,这是因为128越界了,不能插入

# 创建一个无符号的tinyint(0~255)

create table user2 (num TINYINT UNSIGNED);

insert INTO USER2 VALUES(-5);

无符号的tinyint的范围是(0~255),所以-5是不可以插入user2的

2.float类型

语法:float[(m, d)] [unsigned] : m总长度,d指定小数位数

例子:float(4,2),他的范围是-99.99~99.99

float也存在有符号和无符号。创建一个无符号的

这里添加一个负数进去,会添加失败

3.decimal类型

语法:decimal(m, d) [unsigned]:定点数m指定长度,d表示小数点的位数

4.时间日期类型

  1. date:日期 yyyy-mm-dd,占用三字节
  2. timestamp:时间戳,从1970年开始的yyyy-MM-dd HH:mm:ss格式和datetime完全一致,占用四字节
  3. datetime 时间日期格式yyyy-MM-dd HH:mm:ss表示范围从1000到9999,占用八字节

5.char类型

语法:char(L): 固定长度字符串,L是可以存储的长度,单位为字符(字母/汉字),最大长度值可以为255

6.varchar类型

语法:varchar(L): 可变长度字符串,L表示字符长度,最大长度65535个字节

虽说varchar的最大长度是65535,但是有1-2个字节是用来记录数据大小的,所以有效的字节是65533。

编码不同,varchar(L)里的最大值L是不同的。
utf8中,一个字符占3个字节,所以L = 65533/3 = 21844
gbk编码中一个字符占2个字节,所以L = 65533 / 2 = 32766

上面测试的是mysql5.5环境

相关文章