hopeless-dream

导航

MySQL字段的数据类型

整型

类型

占用字节

无符号范围

有符号范围

数据长度(几位数)

tinyint

1

0 ~ 255

-128 ~ 127

3

smallint

2

0 ~ 65535

-32768 ~ 32767

5

mediumint

3

0 ~ 16777215

-8388608 ~ 8388608

8

int

4

0 ~ 2^32

-2^31 ~ 2^32-1

10

bigint

8

0 ~ 2^64

-2^63 ~ 2^63-1

20

浮点型和定点型

  1. MySQL中使用浮点数类型和定点数类型来表示小数
  2. 浮点数类型包括单精度浮点数(float型)和双精度浮点数(double型)。定点数类型就是decimal型。
  3. Decimal型的取值范围和double相同。但是decimal的有效取值范围由M和D决定,而且Decimal型的字节数是M+2。也就是说,定点数的存储空间是根据其精度决定的

数据类型

存储需求

有符号

无符号

FLOAT(单精浮点数)

4

-3.402823466E+38 ~ -1.175494351E-38

0和1.175494351E-38~3.402823466E+38

DOUBLE(双精浮点数)

8

-1.7976931348623157E+308~-2.2250738585072014E-308

0和2.2250738585072014E-308 ~ 1.7976931348623157E+308

DECIMAL(M,D)

或DEC(M,D)(定点数)

M > D,大小M + 2

M < D,大小D + 2

同DOUBLE

同DOUBLE

1、Decimal型的取值范围和double相同。但是decimal的有效取值范围由M和D决定,而且Decimal型的字节数是M+2。也就是说,定点数的存储空间是根据其精度决定的。

2、MySQL中可以指定浮点数和定点数的精度。其基本形式如下:数据类型(M,D)。其中,“数据类型”参数是浮点数或定点数的数据类型名称,M参数称为精度,是数据的总长度,小数点不占位置。D参数成为标度,是指小数点后面的长度是D。M的默认值是10,最大值65,D的默认值是0,最大值30

3、对于定点数而言,decimal(M,D)是定点数的标准格式,一般情况下可以选择这种数据类型。
4、如果插入值的精度高于实际定义的精度,系统会自动进行四舍五入处理,使值的精度达到要求。

字符串类型

char(64)

1、定长字符,指定长度后,系统一定会分配指定的空间存储数据
2、基本语法:char(L),L代表字符数(中文与英文字母一样),L长度为0到255

varchar(64)

1、变长字符,指定长度后,系统会根据实际存储需要来计算长度
2、基本语法:varhcar(L),L代表字符数,L的长度理论值0到65535
3、因为varchar要根据系统自动分配空间记录数据长度,所以每个varchar数据产生后,系统会在数据后面增加1-2个字节的额外开销,用来保存数据所占用的空间长度
4、如果数据本身小于255个字符,额外开销一个字节;如果大于255个字符,额外开销两个字节

一个索引列的长度不能超过255字符(765个字节)(对于中文,一个中文占3个字节),utf8mb4中是4个字节

一般都定义为varchar(190)

char和varchar的区别

1、  当插入一条空数据的时候,Varchar占用1个字节来描述这条数据长度,而char则占用固定的4个字节,也就是4个空格
2、  char的插入数据效率比varchar高,varchar需要通过记录数来计算

选型

  • 如果确定数据的长度、字符很短、经常发生变更,使用char,否则使用varchar
  • 如果数据长度超过255个字符,不论是否固定长度,都会使用text

文本类型

文本类型:
Text:存储普通字符文本
Blob:存储二进制文本(图片,文件),一般不用,通常使用一个链接指向对应的文件本身
注意:
    1、在选择对应的存储文本的时候,不要刻意使用text,因为系统会自动根据存储的数据长度选择合适的类型
    2、在选择字符存储的时候,如果数据超过255个字符,一定要选择text存储

枚举类型enum

枚举类型
    如果确定某个字段的数据只有固定的几个值,可以使用enum
基础语法:
enum(数据值1,数据值2) create table t1(sex enum('F','M','UN'));

集合类型set

集合:将多个数据选项可以同时保存的数据类型,本质是将指定的项按照对应的二进制位来进行控制,1表示被选中,0表示没有被选中
基本语法:
    set('值1','值2','值3')

系统为set提供了多个字节进行保存,系统会自动计算选择具体的存储单元

1个字节,set只能存储8个选项

2个字节,set只能存储16个选项

3个字节,set只能存储24个选项

8个字节,set只能存储64个选项

enum:单选(只能插入一个)

set:复选(可以插入多个)

 

时间类型

类型

大小

(字节)

范围

格式

用途

DATE

3

1000-01-01/9999-12-31

YYYY-MM-DD

日期值

TIME

3

'-838:59:59'/'838:59:59'

HH:MM:SS

时间值或持续时间

YEAR

1

1901 ~ 2155

YYYY

年份值

DATETIME

8

1000-01-01 00:00:00 ~ 9999-12-31 23:59:59

YYYY-MM-DD HH:MM:SS

混合日期和时间值

TIMESTAMP

4

1970-01-01 ~ 2038-1-19 11:14:07

YYYYMMDD

HHMMSS

混合日期和时间值,时间戳

列约束及属性

primary key :主建约束,同时保证唯一性和非空.每个表只能有一个PK,我们建议业务无关列(数字列)。
foreign key:外键约束,用于限制两个表的关系,保证从表该字段的值来自于主表相关联的字段的值。
not null :非空约束,保证字段的值不能为空
default:默认约束,保证字段总会有值,即使没有插入值,都会有默认值
unique:唯一,保证唯一性但是可以为空,比如手机号。
auto_increment:自增长列
unsigned: 无符号
comment: 注释

posted on 2020-05-25 22:56  hopeless-dream  阅读(445)  评论(0编辑  收藏  举报