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. [代码]--c#实现屏幕取词源码下载

    最近公司有一个 项目需要实现类似于金山词霸,有道词典等的屏幕取词功能,准确来说是划词功能,网上搜了各种屏幕取词无外乎就两种: A.金山词霸组件法 B.Nhw32.dll法 百度搜到的重复内容真的太多了 ...

  2. P3201 [HNOI2009]梦幻布丁

    题目描述 N个布丁摆成一行,进行M次操作.每次将某个颜色的布丁全部变成另一种颜色的,然后再询问当前一共有多少段颜色.例如颜色分别为1,2,2,1的四个布丁一共有3段颜色. 输入输出格式 输入格式: 第 ...

  3. Fire Net ZOJ - 1002

    题意: 一个n * n 的棋盘 上面有些障碍物  放棋子 棋子不能在同一行 同一列 但可以在同一行或同一列隔着障碍物放 这题与poj1321  的思想差不多 对于一个位置 有两种状态放还是不放 参数i ...

  4. day26 多继承

    class A(object): def test(self): print('from A') class B(A): def test(self): print('from B') class C ...

  5. python的多线程到底有没有用?

    在群里经常听到这样的争执,有人是虚心请教问题,有人就大放厥词因为这个说python辣鸡.而争论的核心无非就是,python的多线程在同一时刻只会有一条线程跑在CPU里面,其他线程都在睡觉.这是真的吗? ...

  6. Status: Checked in and viewable by authorized users 出现在sharepoint 2013 home 页面

    点击home页面上方的publish-> publishing->publish

  7. 洛谷 P2317 [HNOI2005]星际贸易 解题报告

    P2317 [HNOI2005]星际贸易 题目描述 输入输出格式 输入格式: 输出格式: 如果可以找到这样的方案,那么输出文件output.txt中包含两个整数X和Y.X表示贸易额,Y表示净利润并且两 ...

  8. luogu2865 路障 (dijkstra)

    求次短路,dijkstra时同时记下到某点的最短距离和次短距离即可. #include<cstdio> #include<cstring> #include<algori ...

  9. 和我一起使用postcss+gulp进行vw单位的移动端的适配

    随着iphoneX的出现,新的一轮适配大法应该又出现了吧?不论是使用flex布局或者媒体查询,好似都不能完全解决新加的刘海带来的适配问题. 但是有一个单位vw就神奇的解决了这个问题.vw和vh是相对于 ...

  10. MATLAB:图形加法运算(imadd函数)

    close all; %关闭当前所有图形窗口,清空工作空间变量,清除工作空间所有变量 clear all; clc; I=imread('rice.png'); %读入图像rice,赋值给I J=im ...