MySQL基础(1) | 数据类型


  1. 数值类型
TINYINT #小整数值,1 字节,有符号(-128,127),无符号(0,255)
SMALLINT #大整数值,2 字节
MEDIUMINT #大整数值,3 字节
INT或INTEGER #大整数值,4 字节,有符号(-2147483648,2147483647),无符号(0,4294967295)
BIGINT #极大整数值,8 字节 FLOAT #单精度浮点数值,4 字节
DOUBLE #双精度浮点数值,8 字节
DECIMAL #小数值,定点数,DECIMAL(M,D),其中M称为精度,表示总共的位数;D称为标度,表示小数的位数;默认D值为0、M值为10
  1. 时间类型
DATE #日期值,YYYY-MM-DD,1000-01-01/9999-12-31
TIME #时间值或持续时间,HH:MM:SS,'-838:59:59'/'838:59:59'
YEAR #年份值,YYYY,1901/2155
DATETIME #混合日期和时间值,8字节,YYYY-MM-DD HH:MM:SS,1000-01-01 00:00:00/9999-12-31 23:59:59
TIMESTAMP #混合日期和时间值,时间戳,4字节,'1970-01-01 00:00:01.000000' 到 '2038-01-19 03:14:07.999999'
  1. 字符串类型
# 字节型字符串【二进制字节型字符串,没有字符集概念】
BINARY #定长二进制字节型字符串
VARBINARY #变长二进制字节型字符串 TINYBLOB #不超过 255 个字符的二进制字符串,0-255字节
BLOB #二进制形式的长文本数据,0-65 535字节 => ~64kb
MEDIUMBLOB #二进制形式的中等长度文本数据,0-16 777 215字节 => ~16MB
LONGBLOB #二进制形式的极大文本数据,0-4 294 967 295字节 => ~4GB # 字节型字符串 end # 字符型字符串 CHAR #定长字符串,0-255字节
VARCHAR #变长字符串, 0-65535 字节 TINYTEXT #短文本字符串,0-255字节
TEXT #长文本数据,0-65535字节 => ~64kb
MEDIUMTEXT #中等长度文本数据,0-16 777 215字节 => ~16MB
LONGTEXT #极大文本数据,0-4 294 967 295字节 => ~4GB # 字符型字符串 end

解析

① 区分字节型和字符型

  • BINARY(N)VARBINARY(N)中的N指的是字节长度。

  • CHAR(N)VARCHAR(N)中N指的是的字符长度。

  • 对于BINARY(10) ,其可存储的字节固定为10,而对于CHAR(10) ,其可存储的字节视字符集的情况而定。

②区分BINARY,VARBINARY ,CHAR,VARCHAR 四类插入和查询的不同机制

  • char(N)用来存储非二进制字符串,插入时,对于少于N个字符的会自动在尾部加空格,查询时,尾部的空格就会被丢弃掉【即插入时尾部的空格会被去掉】

  • vachar(N) 用来存储非二进制字符串,插入时,对于少于N个字符的不填补空格,查询时,尾部的空格不会被丢弃掉【即原样输出】

  • binary(N)存储二进制字符串,插入进,少于N个字节的会自动在尾部加0x00,取出时,所有的字节都保留,返回定义长度的字节长度,在比较的时候,所有的字节都是有效的【尾部会填充\0】

  • varbinary在插入不会去填补0x00字节,查询的时候也不会丢弃任何字节,在比较的时候,所有的字节都是有效的【也是原样输出】

    示例:

    create table test(
    a VARCHAR(3),
    b CHAR(3),
    c VARBINARY(3),
    d BINARY(3)
    )engine=innodb charset=gbk; insert into test select 'a ','a ','a ','a '; select hex(a),hex(b),hex(c),hex(d) from test;
    select concat('$',a,'$'),concat('$',b,'$'),concat('$',c,'$'),concat('$',d,'$')
    from test;
    SELECT a = 'a ', b = 'a', c = 'a ', d = 'a \0'from test;

    结果集1:

    结果集2:

​ 结果集3:

  1. 扩展
  • VARCHAR:

    在mysql中必须满足最大行宽度限制,也就是 65535(64k)字节,而varchar本身是按字符串个数来定义的【即varchar(xxx)括号内的xxx按字符串个数来定义】;在mysql中使用uft-8字符集一个字符占用三个字节,所以单表varchar实际占用最大长度是(65535-2)/3=21844个字符(超过255个字节会有2字节的额外占用空间开销,所以减2;如果是255以下,则减1)。

示例:

#VARCHAR单表单字段最长不能超过21844
CREATE TABLE test(
va VARCHAR(21845)
)DEFAULT CHARSET=utf8;
[Err] 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
#这样就可以了
CREATE TABLE test(
va VARCHAR(21844)
)DEFAULT CHARSET=utf8;
受影响的行: 0
时间: 0.155s
  • TEXT:

    最大限制也是64k个字节,但是本质是溢出存储。innodb默认只会存放前768字节在数据页中,而剩余的数据则会存储在溢出段中,虽然也受单表65535最大行宽度限制,但mysql表中每个BLOB和TEXT列实际只占其中的5至9个字节,其他部分将进行溢出存储。所以实际占用表最大行宽度为9+2字节,外加的是额外开销,跟表的实际宽度没有关系。

  • 获取当前时间的方法

SELECT CURRENT_TIMESTAMP;
SELECT CURRENT_TIMESTAMP();
SELECT NOW();
SELECT LOCALTIME;
SELECT LOCALTIME();
SELECT LOCALTIMESTAMP;
SELECT LOCALTIMESTAMP();
  • 字符串转时间
select str_to_date('2017-10-16 15:30:28','%Y-%m-%d %H:%i:%s');
  • 时间转字符串
select date_format(now(), '%Y-%m-%d %H:%i:%s') ;
  • 通用类型转换方法
#字符串转数字
方法一:SELECT CAST('123' AS SIGNED);
方法二:SELECT CONVERT('123', SIGNED);
方法三:SELECT '123'+0; 二进制,同带binary前缀的效果 : BINARY
字符型,可带参数 : CHAR()
日期 : DATE
时间: TIME
日期时间型 : DATETIME
浮点数 : DECIMAL
整数 : SIGNED
无符号整数 : UNSIGNED

MySQL基础(1) | 数据类型的更多相关文章

  1. MySQL基础之数据类型和运算符

    早些年学习MySQL的笔记,发在博客园上,以便后续回顾学习: 1. 数据类型为int(11),注意到后面的数字11,这表示的是该数据类型指定的显示宽度,指定能够显示的数值中数字的个数.其他数据类型也可 ...

  2. mysql基础之数据类型

    一.整型 分为:tinyint .smallint .mediumint .int .bigint 常用的 分为以下三项: tinyint. smallint.int 数据类型 存储范围 字节 tin ...

  3. mysql基础_数据类型

    1.数字 (1)tinyint(小整数值) 范围:有符号(-128,127) 无符号(0.255) (2)int(大整数值) 范围:有符号  (-2 147 483 648,2 147 483 647 ...

  4. MYSQL基础笔记(六)- 数据类型一

    数据类型(列类型) 所谓数据烈性,就是对数据进行统一的分类.从系统角度出发时为了能够使用统一的方式进行管理,更好的利用有限的空间. SQL中讲数据类型分成三大类:1.数值类型,2.字符串类型和时间日期 ...

  5. mysql基础之基本数据类型

    原文:mysql基础之基本数据类型 列类型学习 mysql三大列类型 整型 Tinyint/ smallint/ mediumint/int/ bigint(M) unsigned zerofill ...

  6. { MySQL基础数据类型}一 介绍 二 数值类型 三 日期类型 四 字符串类型 五 枚举类型与集合类型

    MySQL基础数据类型 阅读目录 一 介绍 二 数值类型 三 日期类型 四 字符串类型 五 枚举类型与集合类型 一 介绍 存储引擎决定了表的类型,而表内存放的数据也要有不同的类型,每种数据类型都有自己 ...

  7. Mysql基础(三):MySQL基础数据类型、完整性约束、sql_mode模式

    目录 2.MySQL基础数据类型.完整性约束.sql_mode模式 1. MySQL常用数据类型 2. 完整性约束 3. MySQL的sql_mode模式说明以及设置 2.MySQL基础数据类型.完整 ...

  8. 数据库02 /MySQL基础数据类型、完整性约束、sql_mode模式

    2.MySQL基础数据类型.完整性约束.sql_mode模式 目录 2.MySQL基础数据类型.完整性约束.sql_mode模式 1. MySQL常用数据类型 MySQL常用数据类型预览 1. 1 数 ...

  9. 0基础学习MySQL 之常用数据类型

    原文地址 =========================================== 数据类型是定义列中可以存储什么数据以及该数据实际怎么存储的基本规则. Mysql的常用数据类型主要有: ...

随机推荐

  1. PowerCat DNS 隧道通信

    powercat 也是一套基于 DNS 通信协议的工具.Powercat的dns的通信是基于dnscat设计的(其服务端就是dnscat).在使用dnscat时需要进行下载和编译. dnscat服务端 ...

  2. C语言博客作业9

    本周作业头 这个作业属于那个课程 C语言程序设计II 这个作业要求在哪里 作业链接 我在这个课程的目标是 熟练掌握C语言 这个作业在那个具体方面帮助我实现目标 pta作业的完成 参考文献 文章链接 本 ...

  3. Springboot | 私人订制你的banner

    1. 搭建一个springboot模块 2. 配置POM文件 3. 自定义banner 3.1 自定义文字字符图案banner 3.2 自定义图案字符图案banner 自定义banner有什么用呢? ...

  4. Fst指数说明

    群体遗传学--Fst指数,即群体间分化指数,用于群体间分化分析. 群体遗传学中衡量群体间分化程度的指标有很多种,最常用的就是Fst指数.Fst指数,由F统计量演变而来.F统计量(FIS,FIT,FST ...

  5. 实现一个简易的RPC

    之前写了一些关于RPC原理的文章,但是觉得还得要实现一个.之前看到一句话觉得非常有道理,与大家共勉.不是“不要重复造轮子”,而是“不要发明轮子”,所以能造轮子还是需要造的. 如果大家还有不了解原理的, ...

  6. Spring Boot 2.x基础教程:使用国产数据库连接池Druid

    上一节,我们介绍了Spring Boot在JDBC模块中自动化配置使用的默认数据源HikariCP.接下来这一节,我们将介绍另外一个被广泛应用的开源数据源:Druid. Druid是由阿里巴巴数据库事 ...

  7. ROS中3D机器人建模(五)

    一.创建一个差速驱动移动机器人模型 前面我们已经创建了一个7-DOF机械臂机器人模型,接下来我们将创建一个差速机器人模型,差速轮式机器人在机器人底盘的两端安装两个轮子, 整个底盘由一个或两个脚轮支撑. ...

  8. pyhton3之进程

    一 什么是进程 首先要了解什么是进程,程序是写出来没有被执行的代码,它是没有生命的实体,只有处理器赋予程序生命时,及程序被操作系统运行起来,他是一个活动的实体,我们称其为进程. 进程是计算机中的程序关 ...

  9. 如何写出优雅的Python代码?

    有时候你会看到很Cool的Python代码,你惊讶于它的简洁,它的优雅,你不由自主地赞叹:竟然还能这样写.其实,这些优雅的代码都要归功于Python的特性,只要你能掌握这些Pythonic的技巧,你一 ...

  10. 🔥SpringBoot图文教程2—日志的使用「logback」「log4j」

    有天上飞的概念,就要有落地的实现 概念+代码实现是本文的特点,教程将涵盖完整的图文教程,代码案例 文章结尾配套自测面试题,学完技术自我测试更扎实 概念十遍不如代码一遍,朋友,希望你把文中所有的代码案例 ...