首页 > 数据库 >MySQL教程 - 数据类型(Data Type)

MySQL教程 - 数据类型(Data Type)

时间:2022-09-01 08:44:19浏览次数:43  
标签:表示 00 字节 MM Type DD 数据类型 YY Data

更新记录
转载请注明出处。
2022年9月1日 发布。
2022年9月1日 从笔记迁移到博客。

数据类型

数据类型概念

数据类型是一种数据的限制,规定数据的存储格式、表示方式、范围大小等

整型

分类

image

说明:声明为无符号数,加上UNSIGNED即可

表示方式

格式:

数据类型 (显示宽度)

EG:

INT(4)  TINYINT(3)

注意:也可以不指定显示宽度,默认显示宽度为能显示该类型值最大值的宽度

浮点型

分类

image

指定显示范围

格式:

数据类型 (总长度,小数点后的长度)

EG:

FLOAT (6,3) DECIMAL(8,3)

注意:
浮点数最好不指定长度,定点数可以指定。原因:易于数据迁移
超过长度的数据插入到表中会进行四舍五入
对精度要求高需使用DECIMAL类型

注意

FLOAT和DOUBLE会进行四舍五入
DECIMAL不会进行四舍五入
DECIMAL(M,D)占用M+2字节

字符串型

分类

字符数据类型

类型 字节数 说明
CHAR(M) M字节 定长字符串,M最大255
VARCAHR(M) M+1字节 可变长字符串,M最大255

文本字符串数据类型

类型 字节大小 存储空间
TINYTEXT 0-255字节 值的长度+2个字节
TEXT 0-65535字节 值的长度+2个字节
MEDIUMTEXT 0-167772150字节 值的长度+3个字节
LONGTEXT 0-42亿字节 值的长度+4个字节

表示方式

字符串数据类型 (最大长度)

EG:

CAHR(5)     字节大小固定为5
VARCHAR(10)   字节大小至少为1最多11

CHAR与VARCHAR区别

CHAR为固定长度,固定内存大小
VARCHAR为自动扩展长度,不固定内存大小,但是默认需要占用一个字节

ENUM枚举类型

作用:限定字符串的取值范围,每次只能选择一个定义的值

类型 字节数 说明
ENUM 1或2字节 枚举类型

表示方式

属性名 ENUM('value1', 'value2'…………..)

插入方法

INSERT INTO panda1 VALUES(1,'dog');

注意:最多可以定义65535个值

SET类型

作用:限定字符串的取值范围,每次可以选择一个或说多个定义的值

类型 字节数 说明
SET 1,2,3,4,8 集合类型

表示方式

属性名 SET('VALUE1',' VALUE2'………)

插入方法

INSERT INTO panda2 VALUES(1,'dog');
INSERT INTO panda2 VALUES(2,'panda,dog');

注意:最多可以定义有64个值

日期和时间

分类

日期类型 字节数 取值范围 默认零值
YEAR 1 1901-2155 0000
DATE 4 1000-01-01至9999-12-31 0000-00-00
TIME 3 -838:59:59至 838:59:59 00:00:00
DATETIME 8 1000-01-01 00:00:00至 9999-12-31 23:59:59 00:00:00
TIMESTAMP 4 19700101080001至20380119111407 000000000

YEAR类型表示方式

四位数值或字符串方式:

EG:'1999'

两位字符串方式:

'00-68' 转为 2000-2069

'70-99' 转为 1970-1999

EG:'35' -> 2035 '17' -> 2017

两位数值方式:

1-69 转为 2001-2069

70-99 转为 1970-1999

EG: 17 -> 2017 25 -> 2025

TIME类型表示方式

‘HH:MM:SS’字符串格式或‘D HH:MM:SS’字符串格式:

D表示天(0-34), HH表示小时 MM表示分钟 , SS表示秒

EG:

'15:00:00' 表示15小时

'2 15:00:00' 表示2天加15小时,内部存储为: 63:00:00

‘HHMMSS’字符串格式或HHMMSS数值格式:

HH表示小时, MM表示分钟, SS表示秒

EG:

'161616' 表示16小时16分16秒

171717 表示17小时17分17秒

备注:可以使用CURRENT_TIME或者NOW()获得当前系统时间

Date类型表示方式

‘YYYY-MM-DD’或‘YYYYMMDD’字符串表示:

YYYY表示年份,MM表示月份,DD表示日子

EG:

'2017-8-31'

‘YY-MM-DD’或’YYMMDD’字符串表示:

YY表示年份, MM表示月份, DD表示日子

YY 取值 '00-68' 转为 2000-2069

YY 取值 '70-99' 转为 1970-1999

YYYYMMDD或YYMMDD数值表示:

YYYY表示年份,YY表示年份,MM表示月份,DD表示日子

YY 取值 1-69 转为 2001-2069

YY 取值 70-99 转为 1970-1999

备注:可以使用CURRENT_DATE或者NOW()来获得当前系统日期

DATETIME类型表示方式

‘YYYY-MM-DD HH:MM:DD’字符格式或’YYYYMMDDHHMMSS’字符格式:

YYYY表示年份,MM表示月份,DD表示日子

HH表示小时,MM表示分钟,SS表示秒

EG:

'2017-8-31 11:49:49' '20170831114949'

‘YY-MM-DD HH:MM:DD’字符格式或’YYMMDDHHMMSS’字符格式:

YY表示年份,MM表示月份,DD表示日子

HH表示小时,MM表示分钟,SS表示秒

YY 取值 '00-68' 转为 2000-2069

YY 取值 '70-99' 转为 1970-1999

EG:

'17-8-31 11:49:49' '170831114949'

YYYYMMDDHHMMSS数值格式或YYMMDDHHMMSS数值格式:

YYYY表示年份,YY表示年份,MM表示月份,DD表示日子

HH表示小时,MM表示分钟, SS表示秒

YY 取值 1-69 转为 2001-2069

YY 取值 70-99 转为 1970-1999

20170831090906 170831090906

备注:也可以使用NOW()获得当前系统的日期时间

TIMESTAMP类型表示方式

基本和DATETIME相同,本质区别是时间范围不同;1970 - 2037

不同之处:

可以使用CURRENT_TIMESTAMP获得当前日期时间

无任何输入或者输入NULL将输入系统时间

二进制类型

分类

二进制类型 取值范围
BIT(M) M位二进制数据,M最大值为64
BINARY(M) 字节数为M,长度为0-M的定长二进制字符串
VARBINARY(M) 长度为0-M的可变长二进制字符串,字节数为长度+1
TINYBLOB 可变长二进制数据,最多255个字节
BLOB 可变长二进制数据,最多2^16-1个字节
MEDIUMBOLB 可变长二进制数据,最多2^24-1个字节
LONGBLOB 可变长二进制数据,最多2^32-1个字节

NULL值问题

NULL进行运算的结果还是NULL

如何选择数据类型

数值类型如何选择

确定范围: 大范围类型还是小范围类型

确定小数精度: 是否需要小数、浮点型、定点型

是否表示金钱: 使用decimal

字符类型如何选择

对速度要求高? 用CHAR

对存储大小有要求?用VARCHAR

大型文本? 用TEXT

多个字符选一个? ENUM

多个字符选多个? SET

日期类型如何选择

只存储年?日期?时间?日期时间?用YEAR、DATE、TIME、DATETIME

只需要小范围日期时间?TIMESTAMP

二进制类型如何选择

存储纯文本?用TEXT

存储二进制文件?用BOLB

标签:表示,00,字节,MM,Type,DD,数据类型,YY,Data
From: https://www.cnblogs.com/cqpanda/p/16645227.html

相关文章

  • 基础数据类型之集合
    1.集合的定义在{}内用逗号分开多个元素,多个元素满足以下三个条件:1.集合元素必须是不可变类型2.集合元素无序3.集合内元素没有重复(打印出来会自动去重)d={}默认是......
  • 1<![CDATA[]]>和转义字符
    <sqlid="toolCaseVo">a.idAS"id",a.tool_codeAS"toolCode",a.dept_idAS"deptId",c.dept_nameAS"deptName",a.......
  • TypeError: Object of type 'bytes' is not JSON serializable
    转载自: https://blog.csdn.net/weixin_41951954/article/details/124838931   ......
  • Object of type 'Decimal' is not JSON serializable
    转载自:  https://blog.csdn.net/weixin_41951954/article/details/124838931 报这个错是因为json.dumps函数发现字典里面有Decimal类型的数据,无法JSON serializabl......
  • 花了两天时间搞定的bug:Unable to convert the Pixel Data as the 'pylibjpeg-libjpeg'
    BUG发生场景:在使用Pydicom包读取含下列压缩类型中的JPEGLossless(Process14,SV1)的dcm图像时,由下图可知需要安装GDCM或者pylibjpeg才能进行正常读取。然而,笔者不仅仅安......
  • mybatis 实体使用@Builder 与 @Data时,赋值错误
    最近在工作中遇到了一个问题,使用mybatis新增数据的时候,定义好一个实体类,填充对应的数据并插入表之后。根据返回的id查询的时候,发现本不应该有数据的字段有数据返回,找了......
  • typedef函数指针用法
    int(*pf)(char*)是声明了一个名为pf的指针变量,这个指针要指向的是“parameter为char*,返回值为int类型”的函数,若要赋值,如下:#include<stdio.h>int(*pf)(char*);int......
  • Antd之No Data转换为中文
    Antd默认的暂无数据是英文的,如下图表格所示。修改的方法为:使用a-config-provider1.在App.vue增加a-config-provider,包装显示的页面<template><a-config-provider......
  • [Typescript Challenges] 1. Easy - Pick
    Forexample:interfaceTodo{title:stringdescription:stringcompleted:boolean}typeTodoPreview=MyPick<Todo,'title'|'completed'>consttodo:......
  • [Typescript] 2. Easy -- readonly
    Forexample:interfaceTodo{title:stringdescription:string}consttodo:MyReadonly<Todo>={title:"Hey",description:"foobar"}todo.title=......