一、整数类型 

整数类型:TINYINT SMALLINT MEDIUMINT INT BIGINT

作用:存储年龄,等级,id,各种号码等

========================================
tinyint[(m)] [unsigned] [zerofill] 小整数,数据类型用于保存一些范围的整数数值范围:
有符号:
-128 ~ 127
无符号:
~ 255 PS: MySQL中无布尔值,使用tinyint(1)构造。 ========================================
int[(m)][unsigned][zerofill] 整数,数据类型用于保存一些范围的整数数值范围:
有符号:
-2147483648 ~ 2147483647
无符号:
~ 4294967295 ========================================
bigint[(m)][unsigned][zerofill]
大整数,数据类型用于保存一些范围的整数数值范围:
有符号:
-9223372036854775808 ~ 9223372036854775807
无符号:
~ 18446744073709551615 例子:tinyint类型
#tinyint默认为有符号
mysql> insert into t1 values(-128);
Query OK, 1 row affected (0.33 sec) mysql> insert into t1 values(127);
Query OK, 1 row affected (0.04 sec) #设置无符号tinyint
create table t2(x tinyint unsigned); mysql> insert into t3 values(0),(255);
Query OK, 2 rows affected (0.34 sec)
Records: 2 Duplicates: 0 Warnings: 0 mysql> select * from t3;
+------+
| x |
+------+
| 0 |
| 255 |
+------+
2 rows in set (0.00 sec)
int类型
int类型有符号
mysql> insert into t4 values (-2147483648),(2147483647);
Query OK, 2 rows affected (0.33 sec)
Records: 2 Duplicates: 0 Warnings: 0 mysql> select * from t4;
+-------------+
| x |
+-------------+
| -2147483648 |
| 2147483647 |
+-------------+
2 rows in set (0.00 sec)
int 设置无符号
mysql> create table t5(x int unsigned);
Query OK, 0 rows affected (0.58 sec) mysql> insert into t5 values (-2147483648),(2147483647);有符号的插不进去了
ERROR 1264 (22003): Out of range value for column 'x' at row 1
mysql> insert into t5 values (2147483648),(2147483647);
Query OK, 2 rows affected (0.09 sec)
Records: 2 Duplicates: 0 Warnings: 0

==============有符号和无符号bigint=============
有符号:
mysql> insert into t6 values (-9223372036854775808),(9223372036854775807);
Query OK, 2 rows affected (0.11 sec)
Records: 2 Duplicates: 0 Warnings: 0
mysql> select * from t6
-> ;
+----------------------+
| x |
+----------------------+
| -9223372036854775808 |
| 9223372036854775807 |
+----------------------+
2 rows in set (0.00 sec) 无符号:
mysql> create table t7(x bigint unsigned);
Query OK, 0 rows affected (0.62 sec) mysql> insert into t7 values (-9223372036854775808),(9223372036854775807);有符号的不能插入了
ERROR 1264 (22003): Out of range value for column 'x' at row 1 mysql> insert into t7 values (9223372036854775807);
Query OK, 1 row affected (0.33 sec) mysql> select * from t7;
+---------------------+
| x |
+---------------------+
| 9223372036854775807 |
+---------------------+
1 row in set (0.00 sec)

二、浮点型

定点数类型  DEC等同于DECIMAL  

浮点类型:FLOAT DOUBLE

作用:存储薪资、身高、体重、体质参数等

======================================
#FLOAT[(M,D)] [UNSIGNED] [ZEROFILL] 定义:
单精度浮点数(非准确小数值),m是数字总个数,d是小数点后个数。m最大值为255,d最大值为30 有符号:
-3.402823466E+38 to -1.175494351E-38,
1.175494351E-38 to 3.402823466E+38
无符号:
1.175494351E-38 to 3.402823466E+38 精确度:
**** 随着小数的增多,精度变得不准确 **** ======================================
#DOUBLE[(M,D)] [UNSIGNED] [ZEROFILL] 定义:
双精度浮点数(非准确小数值),m是数字总个数,d是小数点后个数。m最大值为255,d最大值为30 有符号:
-1.7976931348623157E+308 to -2.2250738585072014E-308
2.2250738585072014E-308 to 1.7976931348623157E+308 无符号:
2.2250738585072014E-308 to 1.7976931348623157E+308 精确度:
****随着小数的增多,精度比float要高,但也会变得不准确 **** ======================================
decimal[(m[,d])] [unsigned] [zerofill] 定义:
准确的小数值,m是数字总个数(负号不算),d是小数点后个数。 m最大值为65,d最大值为30。 精确度:
**** 随着小数的增多,精度始终准确 ****
对于精确数值计算时需要用此类型
decaimal能够存储精确值的原因在于其内部按照字符串存储。
例子:
mysql> create table t1 (x float(255,30));
Query OK, 0 rows affected (0.64 sec) mysql> create table t2(x double(255,30));
Query OK, 0 rows affected (0.61 sec) mysql> create table t3(x decimal(65,30));
Query OK, 0 rows affected (0.62 sec)
分别插入数据:
mysql> insert into t1 values(1.1111111111111111111111111111111);
Query OK, 1 row affected (0.33 sec) mysql> insert into t2 values(1.1111111111111111111111111111111);
Query OK, 1 row affected (0.09 sec) mysql> insert into t3 values(1.1111111111111111111111111111111);
Query OK, 1 row affected, 1 warning (0.11 sec) 三者比较:
mysql> select * from t1;
+----------------------------------+
| x |
+----------------------------------+
| 1.111111164093017600000000000000 |
+----------------------------------+
1 row in set (0.00 sec) mysql> select * from t2;
+----------------------------------+
| x |
+----------------------------------+
| 1.111111111111111200000000000000 |
+----------------------------------+
1 row in set (0.00 sec) mysql> select * from t3;
+----------------------------------+
| x |
+----------------------------------+
| 1.111111111111111111111111111111 |
+----------------------------------+
1 row in set (0.00 sec)

三 日期类型

DATE TIME DATETIME TIMESTAMP YEAR 

作用:存储用户注册时间,文章发布时间,员工入职时间,出生时间,过期时间等

      YEAR
YYYY(1901/2155) DATE
YYYY-MM-DD(1000-01-01/9999-12-31) TIME
HH:MM:SS('-838:59:59'/'838:59:59') DATETIME(常用的) YYYY-MM-DD HH:MM:SS(1000-01-01 00:00:00/9999-12-31 23:59:59 Y) TIMESTAMP YYYYMMDD HHMMSS(1970-01-01 00:00:00/2037 年某时)
例子: 1 year 有个存储范围 1901---2155
mysql> insert into time values (1900);
ERROR 1264 (22003): Out of range value for column 'born_year' at row 1
mysql> insert into time values (1901);
Query OK, 1 row affected (0.33 sec) mysql> insert into time values (2156);
ERROR 1264 (22003): Out of range value for column 'born_year' at row 1
mysql> insert into time values (2155);
Query OK, 1 row affected (0.32 sec)
2============date,time,datetime===========
mysql> create table time2(d date,t time, dt datetime);
Query OK, 0 rows affected (0.64 sec) mysql> insert into time2 values (now(),now(),now());
Query OK, 1 row affected, 1 warning (0.33 sec) mysql> select * from time2;
+------------+----------+---------------------+
| d | t | dt |
+------------+----------+---------------------+
| 2018-07-30 | 11:38:16 | 2018-07-30 11:38:16 |
+------------+----------+---------------------+
1 row in set (0.00 sec)
3  timestamp
mysql> create table time3 (time timestamp);
Query OK, 0 rows affected (0.61 sec) mysql> insert into time3 values();
Query OK, 1 row affected (0.10 sec) mysql> select * from time3;
+---------------------+
| time |
+---------------------+
| 2018-07-30 11:42:04 |
+---------------------+
1 row in set (0.00 sec)
4 timestamp和datatime的区别
在实际应用的很多场景中,MySQL的这两种日期类型都能够满足我们的需要,存储精度都为秒,但在某些情况下,会展现出他们各自的优劣。下面就来总结一下两种日期类型的区别。 1.DATETIME的日期范围是1001——9999年,TIMESTAMP的时间范围是1970——2038年。 2.DATETIME存储时间与时区无关,TIMESTAMP存储时间与时区有关,显示的值也依赖于时区。在mysql服务器,操作系统以及客户端连接都有时区的设置。 3.DATETIME使用8字节的存储空间,TIMESTAMP的存储空间为4字节。因此,TIMESTAMP比DATETIME的空间利用率更高。 4.DATETIME的默认值为null;TIMESTAMP的字段默认不为空(not null),默认值为当前时间(CURRENT_TIMESTAMP),如果不做特殊处理,并且update语句中没有指定该列的更新值,则默认更新为当前时间。 四 字符串类型
#char类型:定长,简单粗暴,浪费空间,存取速度快
字符长度范围:0-255(一个中文是一个字符,是utf8编码的3个字节)
存储:
存储char类型的值时,会往右填充空格来满足长度
例如:指定长度为10,存>10个字符则报错,存<10个字符则用空格填充直到凑够10个字符存储 检索:
在检索或者说查询时,查出的结果会自动删除尾部的空格,除非我们打开pad_char_to_full_length SQL模式(SET sql_mode = 'PAD_CHAR_TO_FULL_LENGTH';) #varchar类型:变长,精准,节省空间,存取速度慢
字符长度范围:0-65535(如果大于21845会提示用其他类型 。mysql行最大限制为65535字节,字符编码为utf-8:https://dev.mysql.com/doc/refman/5.7/en/column-count-limit.html)
存储:
varchar类型存储数据的真实内容,不会用空格填充,如果'ab ',尾部的空格也会被存起来
强调:varchar类型会在真实数据前加1-2Bytes的前缀,该前缀用来表示真实数据的bytes字节数(1-2Bytes最大表示65535个数字,正好符合mysql对row的最大字节限制,即已经足够使用)
如果真实的数据<255bytes则需要1Bytes的前缀(1Bytes=8bit 2**8最大表示的数字为255)
如果真实的数据>255bytes则需要2Bytes的前缀(2Bytes=16bit 2**16最大表示的数字为65535) 检索:
尾部有空格会保存下来,在检索或者说查询时,也会正常显示包含空格在内的内容 例子:
char填充空格来满足固定长度,但是在查询时却会很不要脸地删除尾部的空格(装作自己好像没有浪费过空间一样),
然后修改sql_mode让其现出原形
mysql> insert into t4 values ('aac ','aac ');
Query OK, 1 row affected (0.32 sec)
查询:其实都是存了4个长度,
mysql> select x,char_length(x),y,char_length(y) from t4;
+------+----------------+------+----------------+
| x | char_length(x) | y | char_length(y) |
+------+----------------+------+----------------+
| aac | 3 | aac | 4 |
+------+----------------+------+----------------+
1 row in set (0.32 sec)
更改一个设置
mysql> SET sql_mode = 'PAD_CHAR_TO_FULL_LENGTH';
Query OK, 0 rows affected, 1 warning (0.26 sec)
再次查看:
mysql> select x,char_length(x),y,char_length(y) from t4;
+-------+----------------+------+----------------+
| x | char_length(x) | y | char_length(y) |
+-------+----------------+------+----------------+
| aac | 5 | aac | 4 |
+-------+----------------+------+----------------+
1 row in set (0.00 sec)

五 枚举类型与集合类型

字段的值只能在给定范围中选择,如单选框,多选框
enum 单选 只能在给定的范围内选一个值,如性别 sex 男male/女female
set 多选 在给定的范围内可以选择一个或一个以上的值(爱好1,爱好2,爱好3...)
例子:
创建一个表:

insert into consumer values('egon','male','vip5','read,study'),('alex','female','vip1','girl');
插入数据: mysql> insert into consumer values('egon','male','vip5','read,study'),('alex','female','vip1','play,read');
Query OK, 2 rows affected (0.32 sec)
Records: 2 Duplicates: 0 Warnings: 0 查询:
mysql> select * from consumer;
+------+--------+-------+------------+
| name | sex | level | hobby |
+------+--------+-------+------------+
| egon | male | vip5 | read |
| alex | female | vip1 | play |
| egon | male | vip5 | read,study |
| alex | female | vip1 | play,read |
+------+--------+-------+------------+
4 rows in set (0.00 sec)

15-2 mysql的数据类型的更多相关文章

  1. MySQL日期数据类型、时间类型使用总结

    MySQL日期数据类型.时间类型使用总结 MySQL日期数据类型.MySQL时间类型使用总结,需要的朋友可以参考下.   MySQL 日期类型:日期格式.所占存储空间.日期范围 比较. 日期类型    ...

  2. MySQL的数据类型,MySQL增删改--添加主外键、添加属性、删除主外键、改表名、获取系统当前时间等

    ls /etc/rc.d/init.d/mysql56service mysql56 start ps aux |grep "mysql"|grep "socket=&q ...

  3. MySQL/MariaDB数据类型

    1.为什么要定义MySQL数据类型 定义MySQL数据类型其实就是为了对数据进行分类,实现对不同的分类进行不同的处理 1.使系统能够根据数据类型来操作数据. 2.预防数据运算时出错.例如,通过强大的数 ...

  4. mysql的数据类型和字段属性

    本文内容: 数据类型 数值类型 整数型 浮点型 定点型 日期时间类型 字符串类型 补充: 显示宽度与zerofll 记录长度 字段属性 空\不为空值:NULL.NOT NULL 主键:primary ...

  5. mysql的数据类型和字符集

    MySQL的数据类型 MySQL数据库支持的数据类型主要有以下几种: 整型 浮点型 字符 BLOB型 枚举和集合类型 JSON类型(MySQL5.7新增加的支持) 整型 整数类型是数据库中最基本的数据 ...

  6. (2.15)Mysql之SQL基础——开发设计最佳规范

    (2.15)Mysql之SQL基础——开发设计最佳规范 关键字:mysql三大范式,mysql sql开发规范 分析: show profile.mysqllsla.mysqldrmpslow.exp ...

  7. MySQL日期数据类型总结

    MySQL:MySQL日期数据类型.MySQL时间类型使用总结 MySQL 日期类型:日期格式.所占存储空间.日期范围 比较. 日期类型        存储空间      日期格式           ...

  8. MySql数据库数据类型及约束介绍

    1,MySql中数据类型介绍 整型及浮点型 数据类型 存储范围 字节 TINYINT 有符号值:-2^到2^7-1 无符号值:0到2^8-1 2 SMALLINT 有符号值:-2^15到2^15-1 ...

  9. MySQL日期数据类型和时间类型使用总结

    转自: http://blog.chinaunix.net/space.php?uid=11327712&do=blog&id=32416 MySQL 日期类型:日期格式.所占存储空间 ...

  10. MySQL:MySQL日期数据类型、MySQL时间类型使用总结

    MySQL 日期类型:日期格式.所占存储空间.日期范围 比较. 日期类型        存储空间      日期格式                日期范围------------  -------- ...

随机推荐

  1. 读书笔记--Head First 设计模式 目录

    1.设计模式入门 2.观察者模式 3.装饰者模式 4.工厂模式 5.单件模式 6.命令模式 7.适配器模式与外观模式 8.模板方法模式 9.迭代器与组合模式 10.状态模式 11.代理模式 12.复合 ...

  2. LintCode_415 有效回文串

    给定一个字符串,判断其是否为一个回文串.只包含字母和数字,忽略大小写. 注意事项 你是否考虑过,字符串有可能是空字符串?这是面试过程中,面试官常常会问的问题. 在这个题目中,我们将空字符串判定为有效回 ...

  3. day38 07-Spring框架Bean的时候方式

    Spring是自动帮我们创建对象的,有几种创建Bean的方式呢? 构造方法实例化:(默认无参数)其实就是反射new Instance(). 静态工厂实例化: 实例工厂实例化: 一般不会改变它实例化的方 ...

  4. Uva1252 Twenty Questions

    Twenty Questions https://odzkskevi.qnssl.com/15b7eb4cd1f75f63cee3945b0b845e4f?v=1508411736 [题解] dp[S ...

  5. Codevs1922 骑士共存问题

    1922 骑士共存问题 题目描述 Description 在一个n*n个方格的国际象棋棋盘上,马(骑士)可以攻击的棋盘方格如图所示.棋盘上某些方格设置了障碍,骑士不得进入. 对于给定的n*n个方格的国 ...

  6. 洛谷P1147 连续自然数和 [2017年6月计划 数论01]

    P1147 连续自然数和 题目描述 对一个给定的自然数M,求出所有的连续的自然数段,这些连续的自然数段中的全部数之和为M. 例子:1998+1999+2000+2001+2002 = 10000,所以 ...

  7. python枚举详解

    1. 枚举的定义 首先,定义枚举要导入enum模块. 枚举定义用class关键字,继承Enum类. 用于定义枚举的class和定义类的class是有区别[下一篇博文继续分享]. 示例代码: from ...

  8. SEO优化步骤

    SEO技术并不是简单的几个建议,而是一项需要足够耐心和细致的脑力劳动.大体上,SEO优化主要分为8小步: 1.关键词分析(也叫关键词定位) 这是进行SEO优化最重要的一环,关键词分析包括:关键词关注量 ...

  9. Leetcode876.Middle of the Linked List链表的中间节点

    给定一个带有头结点 head 的非空单链表,返回链表的中间结点. 如果有两个中间结点,则返回第二个中间结点. 示例 1: 输入:[1,2,3,4,5] 输出:此列表中的结点 3 (序列化形式:[3,4 ...

  10. 为什么你应该使用OpenGL而不是DirectX?

    这是一篇很意思的博文,原文链接为:http://blog.wolfire.com/2010/01/Why-you-should-use-OpenGL-and-not-DirectX 大家可以思考一下: ...