MySQL数据类型

可以被分为3类:

    1.整型,数值类型

    2.日期和时间类型

    3.字符串(字符)类型

整型(INT)

数据类型 大小 M
(默认值)
范围(有符号) 范围(无符号) 用途
tinyint [(M)] [UNSIGNED] [ZEROFILL] 1字节 4 -128~127  (-27~27-1) 0 ~ 255 (0 ~ 28-1) 非常小整数值
smallint [(M)] [UNSIGNED] [ZEROFILL] 2字节 6 -32768~32767(-215 ~ 215-1) 0 ~ 65535 (0 ~ 216-1)  较小整数
mediumint [(M)] [UNSIGNED] [ZEROFILL] 3字节 9 -8388608 ~ 8388607 (-223 ~ 223-1) 0 ~ 16777215 (0 ~ 224-1)  中等大小整数
int [(M)] [UNSIGNED] [ZEROFILL] 4字节  11 -2147483648 ~ 2147483647(-231 ~ 231-1) 0 ~ 4294967295 (0 ~ 232-1)  标准整数
integer [(M)] [UNSIGNED] [ZEROFILL] 4字节  11 -2147483648 ~ 2147483647(-231 ~ 231-1) 0 ~ 4294967295 (0 ~ 232-1) int相同
bigint [(M)] [UNSIGNED] [ZEROFILL] 8字节 20 -9223372036854775808 ~9223372036854775807
(-263 ~ 263-1)
0 ~ 18446744073709551615
(0 ~ 264-1)
 较大整数

注:取值范围如果加了unsigned,则最大值翻倍,如tinyint unsigned的取值范围为(0~256)。  

  方括号(“[”和“]”)指出可选的类型修饰符的部分

  M :指出最大的显示尺寸。最大的合法的显示尺寸是 255 。 在MySQL中创建整型字段INT(或其它像tinyint)时,可以设定该字段的位数。如int(11),int(5),如果不指定位数,INT型默认长度为11。字段插入长度与int设定的M无关,当插入长度大于设定的M时,字段值不会被截断,还是按照类型的实际精度进行保存。

  D :适用于浮点类型并且指出跟随在十进制小数点后的数码的数量。最大可能的值是30,但是应该不大于M-2。

    ZEROFILL: 填零,即在数字长度不够的数据前面填充0,以达到设定的长度,MySQL中字段设置为该属性时,将为该列自动地增加UNSIGNED属性.整型字段有个ZEROFILL属性,在数字长度不够的数据前面填充0,以达到设定的长度。M值只当属性为ZEROFILL时,才有区别效果。如表结构为id1 int(10) ,id2 int(5),对应数据为  第一行为(1,1),第二行为(1111111,1111111),当id1,id2字段设置为ZEROFILL属性时,显示数据为第一行为(0000000001,00001),第二行为(0001111111,1111111),不够的位数会以0补齐。

  UNSIGNED
       为“无符号”的意思, 即为非负数。是MYSQL自定义的类型,非标准SQL。unsigned 属性只针对整型,用途:
          1.UNSIGNED 可用来约束数据的范围,例如有些年龄这种值一般能是负数,那么就可以设置一个 UNSIGNED ,这样可以不允许负数插入。
          2.可以增加数值范围(相当于把负数那部分加到正数上)。不过少用,不方便移植。

       整型的每一种都分有无符号(unsigned)和有符号(signed)两种类型(float和double总是带符号的),在默认情况下声明的整型变量都是有符号的类型(char有点特别),如果需声明无符号类型的话就需要在类型前加上unsigned。无符号版本和有符号版本的区别就是无符号类型能保存2倍于有符号类型的正整数数据,比如16位系统中一个int能存储的数据的范围为-32768~32767,而unsigned能存储的数据范围则是0~65535。由于在计算机中,整数是以补码形式存放的。根据最高位的不同,如果是1,有符号数的话就是负数;如果是无符号数,则都解释为正数。另外,unsigned若省略后一个关键字,大多数编译器都会认为是unsigned int。

浮点型(float和double)

  (M,D) 表示总共M位,D个小数位,D包含于M中。浮点类型不能是unsigned的。

  对每种浮点类型,可指定一个最大的显示尺寸M和小数位数D。M的值应该取1到255。D的值可为0到30,但是不应大于M-2。M和D对float和double都是可选的,但对于decimal是必须的,在选项M和D时,如果省略了它们,则使用缺省值,如果D被省略,它被设置为0。如果M被省掉,它被设置为10。

  设一个字段定义为float(5,3),如果插入一个数123.45678,实际数据库里存的是123.457,但总个数还以实际为准,即6位。浮点型在数据库中存放的是近似值,而定点类型在数据库中存放的是精确值。

  decimal(m,d) 参数m<65 是总个数,d<30且 d<m 是小数位。DECIMAL 类型不同于FLOAT和DECIMAL,其中DECIMAL 实际是以串存放的DECIMAL 可能的最大取值范围与DOUBLE 一样,但是其有效的取值范围由M 和D 的值决定。如果改变M 而固定D,则其取值范围将随M 的变大而变大。如果固定M 而改变D,则其取值范围将随D 的变大而变小(但精度增加)。

字符串(char,varchar,_text)

对于可变长的字符类型,其值所占的存储量是不同的,这取决于实际存放在列中的值的长度,这个长度用L表示。

char和varchar
1.char(n) 若存入字符数小于n,则以空格补于其后,查询之时再将空格去掉。所以char类型存储的字符串末尾不能有空格,varchar不限于此。 
2.char(n) 固定长度,char(4)不管是存入几个字符,都将占用4个字节,varchar是存入的实际字符数+1个字节(n<=255)或2个字节(n>255),所以varchar(4),存入3个字符将占用4个字节。 
3.char类型的字符串检索速度要比varchar类型的

varchar和text
1.varchar可指定n,text不能指定,内部存储varchar是存入的实际字符数+1个字节(n<=255)或2个字节(n>255),text是实际字符数+2个字节。 
2.text类型不能有默认值。 
3.varchar可直接创建索引,text创建索引要指定前多少个字符。varchar查询速度快于text,在都创建索引的情况下,text的索引似乎不起作用。

二进制数据

  1._BLOB和_text存储方式不同,_TEXT以文本方式存储,英文存储区分大小写,而_Blob是以二进制方式存储,不分大小写。 
  2._BLOB存储的数据只能整体读出。 
  3._TEXT可以指定字符集,_BLO不用指定字符集。

日期时间类型

MySQL 带有 5 个不同的数据类型可供选择。它们可以被分成简单的日期、时间类型,和混合日期、时间类型。根据要求的精度,子类型在每个分类型中都可以使用,并且 MySQL 带有内置功能可以把多样化的输入格式变为一个标准格式。

若定义一个字段为timestamp,这个字段里的时间数据会随其他字段修改的时候自动刷新,所以这个数据类型的字段可以存放这条记录最后被修改的时间。

定义一个字段 为创建时间/更新时间:

create table t1(
id int primary key auto_increment,
name varchar(255),
create_time datetime DEFAULT CURRENT_TIMESTAMP,
update_time datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP);

Database学习 - mysql数据类型的更多相关文章

  1. Database学习 - mysql数据类型约束

    mysql数据类型 - 属性

  2. MYSQL数据库学习----MYSQL数据类型

    一切数据在计算中都是以二进制形式存储,而8位二进制数就表示1个字节. 通常我们说一种数据类型占多少字节,就是说这种数据类型可以表示多少位的二进制数,同时二进制数可以转换为十进制数,进而得到这种数据类型 ...

  3. Database学习 - mysql 连接数据库 库操作

    连接数据库 语法格式: mysql -h 服务器IP -P 端口号 -u用户名 -p密码 --prompt 命令提示符 --delimiter 指定分隔符 示例: mysql -h 127.0.0.1 ...

  4. Database学习 - mysql 数据库 索引

    索引 索引在mysql 中也叫 '键',是存储引擎用来快速找到记录的一种数据结构.索引对于良好的性能非常关键,尤其是当表中的数据量越来越大时,索引对于性能的影响愈发重要. 索引优化应该是对查询性能优化 ...

  5. Database学习 - mysql 数据库 外键

    外键 外键约束子表的含义:如果在父表中赵达不到候选键,则不允许在子表上进行insert/update 外键预约对父表的含义:在父表上进行update/delete以更新或删除子表中有一条或多条对应匹配 ...

  6. Database学习 - mysql 数据库 表操作

    mysql 数据库 表操作 创建数据表 基本语法格式: 创建数据表: create table 表名( 字段名 datatype 约束, 字段名 datatype 约束, ...... ) 修改表名 ...

  7. Database学习 - mysql 数据库 多表/复合/子 查询

    多表查询 多表查询,基本规则,通过两表有关联字段的进行条件匹配查询 内连接查询 方式一: SELECT 查看字段名[,查看字段名] FROM 一表名,二表名 WHERE 一/二表.字段 = 一/二表. ...

  8. Database学习 - mysql 数据库 数据操作

    mysql数据操作 查询语法 select * | field1,field1 ... from 表名 where 条件 group by 字段 having 筛选 order by 字段 limit ...

  9. Database学习 - mysql 视图/触发器/函数

随机推荐

  1. ecplise tomcat忽然出现404

    场景:之前用的好好的,eclipse可以启动,然后浏览器访问  localhost:8080  出现tomcat 404 页面 解决方法:删掉server ,重新建个 server

  2. 04 Zabbix核心概念回顾

    04 Zabbix核心概念回顾 1. 监控四大核心功能: 数据采集----数据储存----数据展示和数据分析-----告警    1.1. 数据采集方式: SNMP:被监控设备上面必须启用SNMP a ...

  3. 洛谷 画栅栏Painting the Fence 解题报告

    P2205 画栅栏Painting the Fence 题目描述 \(Farmer\) \(John\) 想出了一个给牛棚旁的长围墙涂色的好方法.(为了简单起见,我们把围墙看做一维的数轴,每一个单位长 ...

  4. 平衡树Splay

    维护区间添加,删除,前驱,后继,排名,逆排名 普通平衡树 #include <cstdio> #define ls t[now].ch[0] #define rs t[now].ch[1] ...

  5. mysql数据库几种引擎

    · InnoDB:用于事务处理应用程序,具有众多特性,包括ACID事务支持.(提供行级锁) · BDB:可替代InnoDB的事务引擎,支持COMMIT.ROLLBACK和其他事务特性. · Memor ...

  6. 利用docker进行基础镜像制作

    前言 最近想通过Javaee来开发博客,但是不想因为环境配置问题总是耗时间配置相关配置,所以萌生出用docker镜像来搭建web的系统环境,也是作为docker学习实践的笔记. docker hub注 ...

  7. ubuntu 13.04 开发环境搭建

    install ubuntu1, mysql serversudo apt-get install mysql-server2, ssh sudo apt-get install openssh-se ...

  8. poj1185炮兵阵地 正确代码及错误代码分析

    Solution:状态压缩 因为设置炮兵的局限性(同行两炮兵相差要大于2),一行10个数最多有60种可能性(程序计算) 其中判断可能性的好方法是: if ((i & (i << 1 ...

  9. Zookeeper3.4.10 + ActiveMQ-5.15.0 集群搭建

    网上的教程真的是凤毛麟角,就不想说啥了,一次一次把我带入坑. 好了关于Zookeeper的搭建已经说好了,本文说说基于Zookeeper的MQ集群. 第一步.将mq安装包上传到CentOS7,并解压 ...

  10. loadrunner之Java Vuser协议脚本编写

    步骤:1.根据自己使用的lr版面选择jdk 1)LR11   1.6   32位 2)LR12   1.7   32位 2.安装好jdk,并搭建java环境变量,安装好java代码编写工具 3.在sr ...