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. sas9.2 windows7系统 10年11月后 建立永久数据集时,提示:“用户没有与逻辑库相应的授权级别

    先把你这个逻辑库删掉,在桌面创立空的新文件夹,然后用这个新文件夹在sas里新建逻辑库,名字照旧,再把你要的数据放进空文件夹就好了

  2. node--->PHPStorm 停留在 Scanning files to index..

    使用webpack时,敲了npm 一些命令后,PHPStorm 开始 Scanning files to index...,去建立文件索引,但是如果一直停留在这个状态,说明是npm install 后 ...

  3. A novel multi-swarm particle swarm optimization with dynamic learning strategy(一种新颖的具有动态学习策略的多种群粒子群优化算法)

    1.核心 在每个子种群的粒子被划分为普通粒子(ordinary particles)和交流粒子(communication particles),在每次迭代过程中,不同的粒子执行不同的进化操作.普通粒 ...

  4. markdown常用语法使用笔记+使用技巧(持续更新......)

    参考引用内容: 简书教程 一 基本语法 1. 标题 语法: 在想要设置为标题的文字前面加#来表示,一个#是一级标题,二个#是二级标题,以此类推.支持六级标题. 注:标准语法一般在#后跟个空格再写文字 ...

  5. ogg trail文件序列号不一致

    一.Cause 在某些情况下,对于一个已经running的OGG进程,对已同步的数据(正确的同步或者错误的同步)做修改,修改完之后,需要保持一个一致点,从一致点继续同步. 这时需要人工干涉产生一个新的 ...

  6. Spring相关jar说明

    Spring整合使用说明 一.只是使用spring框架 dist\spring.jar lib\jakarta-commons\commons-logging.jar 如果使用到了切面编程(AOP), ...

  7. 浏览器无法进入GitHub(已解决)

    时间:2020/1/22 今天突然chrome登不上GitHub,一直出现响应时间过长的问题,如下: 开始还以为是GitHub服务器出问题了(虽然概率很小.....),但这种情况一直持续了几个小时,我 ...

  8. <状压DP>solution-POJ3311_Hie with the Pie

    Hie with the Pie Description The Pizazz Pizzeria prides itself in delivering pizzas to its customers ...

  9. Linux后门的几种姿势

    转载自 https://evilanne.github.io/2017/08/26/Linux%E5%90%8E%E9%97%A8-%E6%8C%81%E7%BB%AD%E5%85%B3%E6%B3% ...

  10. 五大常见算法策略之——动态规划策略(Dynamic Programming)

    Dynamic Programming   Dynamic Programming是五大常用算法策略之一,简称DP,译作中文是"动态规划",可就是这个听起来高大上的翻译坑苦了无数人 ...