MySQL数据库的数据类型详解(01)

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/world_zheng/article/details/82941726

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

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

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

1.字符串类型详解

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

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

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

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

    char 

char可以附加参数即:char(n) ,n表示字节数  .

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类型的字符串)

https://www.cnblogs.com/muffe/p/4314537.html(参考网站)

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为定长,VARCHARTEXT为变长

CHAR会造成空间浪费,但是有速度优势                      (浪费空间,节约时间

VARCHARTEXT节省了空间,但是速度就不如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)、时间类型。根据要求的精度,子类型在每个分类型中都可以使用。

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.

 

展开阅读全文

没有更多推荐了,返回首页