MySQL 数据类型

使用场景

在设计数据库时,如果你要存储价格之类带小数点的数据,一般比如价格,我会用decimal类型,不会考虑float,double,因为他们容易产生误差,numeric和decimal同义,numeric将自动转成decimal。

MySQL DECIMAL数据类型用于在数据库中存储精确的数值。我们经常将DECIMAL数据类型用于保留准确精确度的列,例如会计系统中的货币数据。

Decimal(m,d)。

m表示数字的最大位数,范围是1-65

D表示小数点后的位数,范围是0 - 30 ,并且不能大于m。

M默认值为10,d默认值为0

例如:
1、decimal(5,2)所指代的范围是 - 999.99~999.99。数字的最大位数是5位,小数2位

字的位数和所占字节数,有以下对应表:
小数点左侧位数 数据结构所占的字节数
1–2 ----------- 1字节
3–4 ----------- 2字节
5–6 ----------- 3字节
7–9 ----------- 4字节

举例表示:
decimal(18,9)小数位左右各为9位数,此数据所占以上表格即为4字节整数位,4字节小数位;
decimal(20,6)整数位为14位,小数位位6位,此数据需要4个字节给整数位的9位和3字节给另外的5位整数,另外小数位需要3个字节,总共是4+3+3 = 10个字节。
decimal不能够存储以“+”、“-”和“0”开头的数据,如果是“+”开头默认存为正数,而“-”开头则不存储

若数值不符合定义的范围
1、若数值在其取值范围之内,小数位多了,则小数会四舍五入

2、若数值在其取值范围之外,则会用最大(小)值对其填充

MySQL的unsigned

Unsigned 就是将数字类型无符号化
int的类型范围是-2147483648~2147483647, int unsigned的类型范围是0~4294967295

Unsigned也可能带来负面的影响,例如:

CREATE TABLE T(a int unsigned,b int unsigned)
INSERT INTO T SELECT 1,2

SElECT a-b FROM T会是什么结果呢,会是-1吗,答案是不确定的,在MAC系统中会报错,
在linux系统中结果为4294967295,所以尽量不要使用unsigned,但是这并不算是bug,可以参考MySQL技术内幕的解释
怎样获得-1值呢,只要对SQL_Mode这个参数设置即可
SET SQL_Mode=‘NO_UNSIGNED_SUBTRACTION’;

MySQL的 int(11)

11并不是表示长度而是字符的显示宽度

在字段类型为 int 时,
无论你显示宽度设置为多少,
int 类型能存储的最大值和最小值永远都是固定的。

当 int 字段类型设置为无符号且填充零(UNSIGNED ZEROFILL)时,当数值位数未达到设置的显示宽度时,会在数值前面补充零直到满足设定的显示宽度,为什么会有无符号的限制呢,是因为 ZEROFILL 属性会隐式地将数值转为无符号型,因此不能存储负的数值。

  • 如果一个字段设置了无符号和填充零属性,那么无论这个字段存储什么数值,数值的长度都会与设置的显示宽度一致,如上述例子中的字段 b,插入数值 1 显示为00000000001,左边补了 10 个零直至长度达到 11 位;
  • 设置字段的显示宽度并不限制字段存储值的范围,比如字段 d 设置为 int(5),但是仍然可以存储 1234567890 这个 10 位数字;
  • 设置的字符宽度只对数组长度不满足宽度时有效,如d字段 int(5), 插入1 时,长度不足5 ,因此在左边补充四个零直到五位,但是插入123456789 时超过了5位 ,此时显示宽度就不起作用了

MySQL中的mediumblob 类型

MySQL中,BLOB是一个二进制的 大型对象,是一个可以存储大量数据的容器, 他能容纳 不同大小的数据。BLOB类型实际是一个类型系列(Tiny blob、mediumBlob、LongBlob),除了在存储的最大信息量不同外,他们是等同的。

MySQL的四种Blob 类型

类型---------------大小(单位:字节)

TinyBlob----------最大255
Bolb----------------最大65K
MediumBlob-----最大16M
LongBlob---------最大4G

实际使用中根据存入的数据的大小定义不同的Blob类型。
需要注意的是:如果存储的文件过大,数据库的性能会下降很多。

MySQL Text 类型

可以保存一个html源码!!!!!
别人用设计器设计一个页面,直接保存html源码到数据库就可以显示界面了

MySQL Text 类型简介

MySQL Text类型是除了Char 和Vachar字符类型,mysql给我们提供了具有char和varchar无法实现的更多功能的text类型

Text可以用于存储 1字节到4GB长度的文本字符串。我们经常在电子商务网站中找到用于在新闻站点存储物品的Text数据类型,如:产品详细描述

与char 和 varchar不同,不必在列使用text类型时,指定存储长度。此外,当检索或插入文本数据(char和varchar时) ,mysql不会删除或填充空格。

注意

请注意,Text数据不存储在数据库服务器的内存中,因此,每当查询Text数据时,Mysql都必须从磁盘读取他,这与char 和 varchar 相比要慢很多。

MySQL 提供了 四种Text 类型:TinyText,Text,MediumText 、LongText。

下面将列举每个Text类型的大小,假设我们使用一个字符集该字符集需要一个字节来存储字符。

TinyText (255 个字符)(2的8次方 - 1)

在这里插入图片描述

Text (64KB)(65535个字符)2的16次方 -1

在这里插入图片描述

MediumText 16MB

在这里插入图片描述

LongText 4GB

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值