栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Mysql(五) 数据类型

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Mysql(五) 数据类型

一、整型

类型          占用字节        范围(有符号)                                     范围(无符号)
tinyint             1                (-128,127)                                      (0,255)
smallint          2              (-32,768,32,767)                               (0,65 535)
mediumint      3                (-8,388,608,8,388,607)                   (0,16,777,215)
int                   4              (-2,147,483,648,2,147,483,647)       (0,4,294,967,295)
bigint              8              (-9,233,372,036,854,775,808,9,223,372,036,854,775,807)    (0,18,446,744,073,709,551,615)

类型         占用字节范围(有符号)范围(无符号)
tinyint             1(-128,127) (0,255)
smallint         2(-32,768,32,767)  (0,65 535)
mediumint     3(-8,388,608,8,388,607)     (0,16,777,215)
int                   4(-2,147,483,648,2,147,483,647)(0,4,294,967,295)
bigint              8  (-9,233,372,036,854,775,808,9,223,372,036,854,775,807)(0,18,446,744,073,709,551,615)
  • 如何设置无符号和有符号?

有符号  :  创建表时,默认设置是有符号的

无符号  :  create table tab_int ( t1 INT UNSIGNED );#添加关键字UNSIGNED

  • 当存入的数值超出范围如何显示?

当存入数值超出范围时,会自动将临界值存入数据库,Tinyint 类型的数据有符号范围是 -127-127,当存入的数据是-128,则会将-127存入数据库,如果存入的数是128,则会将127存入数据库

  • 创建表时,相应的整数类型设置长度与数据保存范围有关吗?有什么作用?

创建表时设置长度对数据能存储数值的范围并没有影响,数据的存储范围和整数类型有关,-例如当你设置Tinyint的长度为11 但是仍然只能存-127-127范围的数值。

设置长度的作用时跟显示有关,当设置完长度后 加上关键字ZEROFILL ,如果保存的数据长度不够,就会用0填充长度到设置的长度,如果长度够了或者超出长度,都正常显示 例如:

CREATE TABLE ttt1 (
  t1 TINYINT(10) ZEROFILL
);
创建了表ttt1 ,整数类型为TINYINT, 长度为10,  设置0填充

当往数据库中存入10000时(INSERT into ttt1 value(10000))我们看看结果

设置了ZEROFILL之后,会自动变成无符号型,然后我们存入10000之后,超出了范围,所以保存了临界点225,由于设置了长度为10并且以0填充,所以就有了上面的结果。

        

二、小数

1、浮点型

float(M,D) 

double(M,D)

2、定点型

dec(M,D)

decimal(M,D)

总结

M的意思是整数部分加小数部分的长度是M,D代表小数部分的长度,如果超出范围则自动存入临界值。如float(5,2)的数据类型中存入1200.65,存入数据库的值是999.99;

M和D都可以忽略(创建表的时候),如果是float或者是double,精度会随着 插入的值的变化而变化(只要在范围内可以随意插入数据) ,而dec则会默认给长度为(10,0),小数点后不能有数值。例如:

CREATE table floo(
    f FLOAT,
    d DOUBLE,
    e dec
    ) 

INSERT INTO floo  VALUES (9999.66,500.646,80000.656)

  

三、字符型

较短的文本

char(M)  固定长度的字符 , M最大字符数,比较耗费空间,但是效率高

varchar(M)可变长度的字符,M最大字符数,比较省空间,但是效率相对低

enum枚举 

把不重复的数据存储为一个预定义的集合。
有时可以使用ENUM代替常用的字符串类型。
ENUM存储非常紧凑,会把列表值压缩到一个或两个字节。
ENUM在内部存储时,其实存的是整数。
尽量避免使用数字作为ENUM枚举的常量,因为容易混乱。
排序是按照内部存储的整数

枚举建表

CREATE TABLE tab_char(
    c ENUM('a','b','c')
);

这样建表只能存入a,b,c中的一个,存入其他的就是空字符


INSERT into tab_char value('c')

  存入c可以正常存入

INSERT into tab_char value('d')
 

 存入d就变成空字符

set集合

set数据类型建表

CREATE TABLE tab_set(
    c SET('a','b','c','d')
);

这样建表只能存入a,b,c中的一个或者多个,存入其他的就是空字符

较长的文本

text

blob(较大的二进制)

总结

VARCHAR用于存储可变长字符串,它比定长类型更节省空间。
VARCHAR使用额外1或2个字节存储字符串长度。列长度小于255字节时,使用1字节表示,否则使用2字节表示。
VARCHAR存储的内容超出设置的长度时,内容会被截断。
CHAR是定长的,根据定义的字符串长度分配足够的空间。
CHAR会根据需要使用空格进行填充方便比较。
CHAR适合存储很短的字符串,或者所有值都接近同一个长度。
CHAR存储的内容超出设置的长度时,内容同样会被截断。

使用策略:
对于经常变更的数据来说,CHAR比VARCHAR更好,因为CHAR不容易产生碎片。
对于非常短的列,CHAR比VARCHAR在存储空间上更有效率。
使用时要注意只分配需要的空间,更长的列排序时会消耗更多内存。
尽量避免使用TEXT/BLOB类型,查询时会使用临时表,导致严重的性能开销。

四、日期型
日期和时间类型字节最小值最大值
date41000-01-019999-12-31
datetime81000-01-01 00:00:009999-12-31 :23:59:59
timetamp4197001010800012038年的某个时刻
time3-838:59:59838:59:59
year119012155

其中 timetamp受时区影响,较能贴近本地当前时间,但是能表达的时间范围较小,在时间范围内尽量用timetamp作为时间类型,效率也高一点。datetime不受时区影响

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/309646.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号