0
点赞
收藏
分享

微信扫一扫

MySQL--数据类型

朱小落 2022-03-23 阅读 84



类型1:串数据

        串数据类型很常用。它们存储串,如名字、地址、电话号码、邮政编码等。有两种基本的串类型,分别为定长串和变长串。


串数据类型



说明



char



1~255个字符的定长串。长度必须在创建时指定,否则默认为1。

若指定长度为10,输入"abc"时,其后边7个字符全都是空格。总占用存储长度仍为10。



enum



接受最多64K个串组成的一个预定义集合的某个串



text



最大长度为64K的变长文本(2^16-1)        



tinytext



与TEXT相同,但最大长度为255字节(2^8-1)



mediumtext



与TEXT相同,但最大长度为16M(2^24-1)



longtext



与TEXT相同,但最大长度为4GB(2^32-1)



set



接受最多64个串组成的一个预定义集合的零个或多个串



varchar



长度可变,长度必须指定。Mysql5.0.3之后,最大长度为65535,5.0.3之前为255。

如果在创建时指定为VARCHAR(n),则可存储0到n个字符的变长串。

若指定长度为10,输入"abc"时,总占用存储长度为3。


char和varchar对比

char

varchar

读写速度

char要比varchar快

空间占用

varchar比char占用少

长度

最大255字符

最大65535字符

格式

  • 使用引号 :                  不管使用何种形式的串数据类型,串值都必须括在引号内(通常单引号更好)。
  • 当数值不是数值时:     你可能会认为电话号码和邮政编码应该存储在数值字段中(数值字段只存储数值数据),但是,这样做却是不可取的。如果在数值字段中存储邮政编码01234,则保存的将是数值1234,实际上丢失了一位数字。需要遵守的基本规则是:如果数值是计算(求和、平均等)中使用的数值,则应该存储在数值数据类型列中。 如果作为字符串(可能只包含数字)使用,则应该保存在串数据类型列中。

类型2:数值数据

        数值数据类型存储数值。 MySQL支持多种数值数据类型,每种存储的数值具有不同的取值范围。显然,支持的取值范围越大,所需存储空间越多。此外,有的数值数据类型支持使用十进制小数点(和小数),而有的则只支持整数。


数值数据类型



说明



boolean(或bool)



布尔标志,值为0/1。是TINYINT(1)的同义词。



bit



位字段,1~64位。(在MySQL5之前,BIT在功能上等价于TINYINT)。默认为1位



int(或integer)



整数值,支持 -2^31~2^31-1(如果是UNSIGNED,为0~2^32)的数。默认长度为11



tinyint



整数值,支持 -2^7(128)~2^7-1(127)(如果为UNSIGNED,为0~2^8-1(255))的数。默认长度为4.

可与Java的Boolean/boolean类型对应(1对应TRUE/true,0对应FALSE/false)。此时,一般将tinyint长度指定为1。



smallint



整数值,支持 -2^15~2^15-1(如果是UNSIGNED,为0~2^16-1(65535))的数。默认长度为6



mediumint



整数值,支持 -2^23~2^23-1(如果是UNSIGNED,为0~2^24-1)的数。默认长度为9



bigint



整数值,支持 -2^63~2^63(如果是UNSIGNED,为0~2^64)的数。默认长度为20



decimal(或dec)



精度可变的浮点值。定点类型在数据库中存放的是精确值。

decimal(m,d)    //m<65 :总位数  d<30且 d<m :小数位。



double



双精度浮点值。用法:double(m,n)    //m:总位数  n:小数位数

(-1.797 693 134 862 315 7 E+308,-2.225 073 858 507 201 4 E-308),0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308)      //有符号范围

0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308)   //无符号范围



float



单精度浮点值。

(-3.402 823 466 E+38,-1.175 494 351 E-38),0,(1.175 494 351 E-38,3.402 823 466 351 E+38)   //有符号范围

0,(1.175 494 351 E-38,3.402 823 466 E+38)     //无符号范围

float(5,3):若插入一个数123.45678,实际数据库里存的是123.457,但总位数还以实际为准,即6位。



real



4字节的浮点值。


UNSIGNED

        有符号或无符号 所有数值数据类型(除BIT和BOOLEAN外)都可以有符号或无符号。有符号数值列可以存储正或负的数值,无符号数值列只能存储正数。默认情况为有符号,但如果你知道自己不需要存储负值,可以使用UNSIGNED关键字,这样做将允许你存储两倍大小的值。

格式

  • 不使用引号                 与串不一样,数值不应该括在引号内。
  • 存储货币数据类型      MySQL中没有专门存储货币的数据类型,一般情况下使用DECIMAL(8, 2)

类型3:日期和时间

其他网址

MySQL 日期与时间方面的函数 - MySQL 中文版 -

​​MySQL ADDDATE() Function​​

MySQL使用专门的数据类型来存储日期和时间值。


数值数据类型



说明



date



表示1000-01-01~9999-12-31的日期,格式为yyyy-mm-dd



datetime



DATE和TIME的组合



timestamp



功能和DATETIME相同(但范围较小)



time



格式为HH:MM:SS



year



用2位数字表示,范围是70(1970年)~69(2069年),用4位数字表示,范围是1901年~2155年


对于这些时间相关的类型,可以设置为:插入时自动插入当前时间,更新时自动更新当前时间,如下:

CREATE TABLE `timestampTest` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(20) DEFAULT NULL,
`create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
`update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8

对于Navicat软件,也可以设置。注意,若是时间类型,点击后会有如下界面,需要手动输入CURRENT_TIMESTAMP,若选择“根据当前时间戳更新”则update时更新,否则,在创建时设为默认值就不变了。

MySQL--数据类型_java

类型4:二进制

        二进制数据类型可存储任何数据(甚至包括二进制信息),如图像、多媒体、字处理文档等。


二进制数据类型



说明


binary(n)

固定长度为 n 字节,其中 n 值从 1 到 8,000 ,存储空间为 n 字节

varbinary(n)

可变长度,n 的取值范围为 1 至 8,000,存储空间以实际情况而定,小于等于n。


blob


最大长度为65535 (2^16-1)字节


tinyblob


最大长度为255 (2^8-1)字节


mediumblob


最大长度为16777215 (2^24-1)字节


longblob


最大长度为4294967295或4GB (2^32-1)字节

BLOB和TEXT在以下方面与VARBINARY和VARCHAR不同:

  • BLOB和TEXT列在存储或者读取时没有删除末尾的空白。在MySQL 5.0.3之前,这不同于 VARBINARY和VARCHAR,这两者在存储时会删除末尾的空白。

  • 在比较中,TEXT是空间扩展的,以适应比较对象, 与CHAR和VARCHAR完全一样。

  • 对于BLOB和TEXT列的索引,必须指定索引前缀的长度。对于CHAR和VARCHAR,前缀长度是可选的。见章节   7.5.1,“列索引”。

  • BLOB和TEXT列不能包含DEFAULT值。

英文: 

BLOB and TEXT differ from VARBINARY and VARCHAR in the following ways:

  • There is no trailing-space removal for BLOB and TEXT columns when values are stored or retrieved. Before MySQL 5.0.3, this differs from VARBINARY and VARCHAR, for which trailing spaces are removed when values are stored.

  • On comparisons, TEXT is space extended to fit the compared object, exactly like CHAR and VARCHAR.

  • For indexes on BLOB and TEXT columns, you must specify an index prefix length. For CHAR and VARCHAR, a prefix length is optional. See Section 7.5.1, “Column Indexes”.

  • BLOB and TEXT columns cannot have DEFAULT values.

显示宽度

        类型后边都可以跟一个(length),比如int(11)不写也有默认值。

        显示宽只是指明Mysql最大可能显示的数字个数,数值的位数小于指定的长度时会在左侧补0填充;如果插入了大于显示长度的值,只要该值不超过该类型的取值范围,数值依然可以插入,而且显示出来。

        以int为例:范围是-2^31(2147483648)~2^31-1(2147483647)。其最长的位数就是负数的最大长度了:11。

SQL与Java数据类型对应

java类型

数据库类型

备注

Boolean,boolean

BOOLEAN,BIT

也可以用TINYINT等数字类型。此时,若Boolean为true对应数字类型的1。

Byte,byte

TINYINT

Short,short

SMALLINT

Integer,int

INTEGER

Long,long

BIGINT

Float,float

FLOAT

Double,double

DOUBLE

String

CHAR,VARCHAR

String

CLOB,LONGVARCHAR

String

NVARCHAR,NCHAR

String

NCLOB

Object

ARRAY

BigDecimal

REAL,DECIMAL,NUMERIC

byte[]

BLOB,LONGVARBINARY

Object

OTHER或者未指定类型

Date,LocalDateTime

TIMESTAMP


对于LocalDateTime、LocalDate、LocalTime,Mybatis-Plus从3.1.1开始,用Mybatis3.5.1,Mybatis 3.5.1版本对这几种类型的转换交由JDBC,若JDBC组件不支持其转换则报错。druid的1.1.21解决此问题。以下组合可用

mysql.connector.java 8.0.17
druid 1.1.21
mybatis.plus 3.2.0


Date,LocalDate

DATE

Date,LocalTime

TIME

java.sql.Date

DATE

java.sql.Time

TIME

java.sql.Timestamp

TIMESTAMP

枚举类

VARCHAR或兼容的字符串类型

其他网址

见《MySQL必知必会》=>附录D MySQL数据类型


举报

相关推荐

0 条评论