mysql数据类型三大类详解_MySQL数据库的数据类型详解(01)

Mysql的数据类型主要分为三类:数字类型、字符串(字符)类型、日期和时间类型,因为时间紧迫,根据学习的须要html

数字类型暂不作详解,等待有时间了在修改此文档,此文主要介绍mysql 数据类型中的字符串类型;java

注:数据类型支持附加参数,例如:float(7,3),7表明显示的数值不能超过7,3表示小数点后面有三位数字;mysql

1.字符串类型详解sql

.字符串类型可分为3类,普通的文本字符串类型(char和varchar)、可变类型(text和blob)和特殊类型(set和enum)数据库

定长字符串:定长字符串一般具备相同的长度,是使用定长数据类型保存的。在定长数据类型里,一般使用空格来填充不足的字符,char就属于定长字符串。好比:char(10) 若是字段长度是10,而输入的数据只有5位,那么剩余的5位就会被记录为空格,使用空格填充,填充空格确保了字段里每一个值都具备相同的长度,若是插入字符数据超过设定长度,则会被截取下来,多余的存不进去。学习

变长字符串:也就是长度不固定的字符串。如varchar。定长数据类型利用空格来填充字段里的空白,但变长字符串不这样作。举例来讲,若是某个变长字段的长度定义为10,而输入的字符串长度为5,那么这个值的总长度也就是5,这时并不会使用空格来填充字段里的空白。网站

1.普通的文本字符串类型编码

char spa

char能够附加参数即:char(n) ,n表示字节数  .code

char(n)与char都属于定长字符串

取值范围为0-255个字符。

char(n)在保存的时候,后面会用空格填充到指定的长度,检索的时候后面的空格会去掉。例如:保存字符串’LENOVO ’,共6个英文字母,char(60):6个字母,补齐54个空格,实际占用60个字节(一个英文字母占用一个字符)。char会形成空间浪费,可是有速度优点 。若是插入字符数据超过60,则会被截取下来,多余的存不进去。

varchar;

varchar也能够指定字节数:varchar(n)

在mysql5.0之前,varchar或varchar(n)的取值范围最大为0-255个字符,mysql5.0版本之后,,varchar(n)或varchar的取值范围最大为65535个字节长度;(因此参考书中若是写的varchar(n)取值范围是0-255,它是写的Mysql5.0版本以前的取值范围。)

varchar或varchar(n)属于(可变字符串)变长字符串,varchar(n)后面不会用空格代替。例如:保存字符串’LENOVO ’,共6个英文字母,VARCHAR(60):6个字母,实际占用6+1个字节。

特色1:它比使用固定长度类型(char类型)占用更少的存储空间;

2. varchar(n)会使用额外的1-2个字节存储值长度。列长度n<=255使用一字节保存,n>255使用2字节保存。例如:varchar(10)会占用11字节存储空间;varchar(500)会总共占用502个字节存储空间;

3. varchar类型的变化

MySQL 数据库的varchar类型在4.1如下的版本中的最大长度限制为255,其数据范围能够是0~255或1~255(根据不一样版本数据库来定)。在 MySQL5.0以上的版本中,varchar数据类型的长度支持到了65535,也就是说能够存放65532个字节的数据,起始位和结束位占去了3个字 节,也就是说,在4.1或如下版本中须要使用固定的TEXT或BLOB格式存放的数据可使用可变长的varchar来存放,这样就能有效的减小数据库文 件的大小。

MySQL 数据库的varchar类型在4.1如下的版本中,varchar(存储的是Unicode数据类型的字符)不论是一个字符仍是一个汉字,都存为2个字节 ,通常用做中文或者其余语言输入,这样不容易乱码 ;varchar: 汉字是2个字节,其余字符存为1个字节 ,varchar适合输入英文和数字。

4.0版本如下,varchar(20),指的是20字节,若是存放UTF8汉字时,只能存6个(每一个汉字3字节) ;5.0版本以上,varchar(20),指的是20字符,不管存放的是数字、字母仍是UTF8汉字(每一个汉字3字节),均可以存放20个,最大大小是65532字节 ;varchar(20)在Mysql4中最大也不过是20个字节,可是Mysql5根据编码不一样,存储大小也不一样,具体有如下规则:

a) 存储限制

varchar 字段是将实际内容单独存储在聚簇索引以外,内容开头用1到2个字节表示实际长度(长度超过255时须要2个字节),所以最大长度不能超过65535。

b) 编码长度限制

字符类型若为gbk,每一个字符最多占2个字节,最大长度不能超过32766;

字符类型若为utf8,每一个字符最多占3个字节,最大长度不能超过21845。

若定义的时候超过上述限制,则varchar字段会被强行转为text类型,并产生warning。

c) 行长度限制

致使实际应用中varchar长度限制的是一个行定义的长度。 MySQL要求一个行的定义长度不能超过65535。若定义的表长度超过这个值,则提示

ERROR 1118 (42000): Row size too large. The maximum row size for the used table type, not counting BLOBs, is 65535. You have to change some columns to TEXT or BLOBs。

varchar与char比较

varchar比较节约存储空间,但效率较低

char效率比varchar效率高,速度快,但比较存储空间。

数据的检索效率由高到低:char>varchar>text(下文中将讲解test类型的字符串)

2.可变类型(TEXT与BLOB)

a)text:用来存储长文本;

b)BLOB:BLOB二进制大对象,是一个能够存储二进制文件的容器,在计算机中,BLOB经常是数据中用来存储二进制文件的字段类类型。BLOB是一个大文件,典型的BLOB是一张图片或一个声音,因为他们的尺寸,必须使用特殊的方式来处理。

text与blob,它们的大小能够改变,text类型适合存储长文本,而blob类型适合存储二进制数据,支持任何数据,如文本、声音和图像。text和blob类型的介绍以下。

类型

最大长度

说明

TINYBOLB(很是小的BOLB(二进制大对象))

0-255字节

小的BLOB字段。

不超过255个字符的二进制字符串

BLOB

0-65535字节

常规的BLOB字段

(二进制形式的长文本数据)

MEDIUMBLOB

0-16777215字节

中型BLOB字段

(二进制形式的中等长度文本数据)

LONGBLOB

0-4294967295字节

长BLoB字段

(二进制形式的极大文本数据)

TINYTEXT

0-255字节

小的TEXT字段

(短文本字符串)

TEXT

0-65535字节

常规的TEXT 字段

(长文本数据)

MEDIUMTEXT

0-16777215字节

中型TEXT字段

(中等长度的文本数据)

LONGTEXT

0-4294967295字节

长TEXT字段(极大地文本数据)

存储文本的类型TEXT系列:(Text是变长的,存多少,占多少)

TINYTEXT

TEXT

MEDIUMTEXT

LONGTEXT

注:CHAR为定长,VARCHAR和TEXT为变长

CHAR会形成空间浪费,可是有速度优点  (浪费空间,节约时间

VARCHAR和TEXT节省了空间,可是速度就不如CHAR(浪费时间,节约空间)

【建议】:

(1)常常变化的字段用VARCHAR

(2)知道固定长度的用CHAR

(3)尽可能用VARCHAR

(4)超过255字节的只能用VARCHAR或者TEXT

(5)能用VARCHAR的地方不用TEXT  ,由于检索效率Varchar比Text高效.

数据的检索效率是:char>varchar>text

3.日期和时间类

lMySQL带有 5 个不一样的日期类型可供选择

被分红简单的日期(DATE)、时间类型(TIME),和混合日期和时间(DATETIME)、时间类型。根据要求的精度,子类型在每一个分类型中均可以使用。

1d12b0058c2ae46c862b286d2dda2f97.png

Year:(指标是年份)1911—2155

Date(表示的是日历:年、月、日)例如:1992-01-1

Time(表示时间(时分秒)):23:59:59

DateTime(日历+时间(年月日、十分秒)):例如:2018-11-27 02:34:59

TimestaMp(表示时间戳):某个时间段

4.数字类型

整数数据类型:

int ===对应Java中的int/integer

bigint==对应java中的Long/long

tinnint 、smallint、mediumint(这几个是不经常使用的。)

mysql是一个可选的显示宽度指示器的形式对sql标准进行扩展,这样当从数据库检索一个值时,能够把这个值加长到指定的长度,例如:指定一个字段类型为int(6),就能够保证所包含数字少于6的值从数据库中检索出来时可以自动的用空格填充,须要注意的是,使用一个宽度指示器不会影响字段的大小和它能够存储的值得范围,好比int(3)不是说最大只能存三个数,int它的范围是已经固定了的,这一点与char(n)不一样,好比char(10),长度为10,最多能够输入10个字符,固然不足10个字符也能够不足的话前面用空格填充,而int(10)的10表示显示的数据的长度,不是存储数据的大小,长度不足前面补0,实际上,定义整数的时候,是用不到这个的。

浮点型数据类型

float ==对应java中的float

double:==对应java中的double

以上两者都支持附加参数,float(7,3)表明显示的数值长度不能超过7位,3表示小数点后有3位数字。

double(5,2)表示整数和小数一共占5位,其中小数占两位,不要理解为整数占5位。

但以上二者都不能精确的表示数值,好比计算金钱的话使用的是decimal数据类型,它对应java 中的bigdecimal;

5.Decima(精确小数类型)

decimal也能够有上面的那种写法,

Decimal为SQL Server、MySql等数据库的一种数据类型,不属于浮点数类型,能够在定义时划定整数部分以及小数部分的位数。Decimal属于精确小数类型。decimal 类型具备更高的精度和更小的范围,它适合于财务和货币计算。对于精度比较高的东西,好比money,用decimal类型,不会考虑float,double,由于他们容易产生偏差..

decimal的详细介绍

decimal(a,b)

参数说明

a指定指定小数点左边和右边能够存储的十进制数字的最大个数,最大精度38。

b指定小数点右边能够存储的十进制数字的最大个数。小数位数必须是从 0 到 a之间的值。Decimal的数据类型默认小数位数是 0。

Decimal(n,m)表示数值中共有n位数,其中整数n-m位,小数m位。例:decimal(10,6),数值中共有10位数,其中整数占4位,小数占6位。

例:decimal(2,1),此时,插入数据“12.3”、“12”等会出现“数据溢出错误”的异常;插入“1.23”或“1.2345...”会自动四舍五入成“1.2”;插入“2”会自动补成“2.0”,以确保2位的有效长度,其中包含1位小数。

备注

DECIMAL数据类型用于要求很是高的精确度的计算中,这些类型容许指定数值的精确度和计数方法做为选择参数。精确度在这里是指为这个值保存的有效数字的总个数,而计数方法表示小数点后数字的个数。例如,语句DECIMAL (5,2)规定了存储的值将不会超过5位数字,开且小数点后面有2位数字。

Bit数据类型

Bit称为位数据类型,对应java 中Boolean(布尔数据类型)。其数据有两种取值:0和1,长度为1位。在输入0之外的其余值时,系统均把它们当1看待。这种数据类型常做为逻辑变量使用,用来表示真、假或是、否等二值选择。其中0表示false,1表示true.

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值