MySQL 中的数据类型介绍

本文详细介绍了MySQL中的数据类型,包括数值类型(整数、定点数、浮点数和BIT)、字符串类型(CHAR、VARCHAR、BINARY、VARBINARY、BLOB、TEXT、ENUM和SET)、时间日期类型(DATE、DATETIME、TIMESTAMP、TIME和YEAR)以及几何类型。内容涵盖了各种类型的存储、取值范围、精度和使用场景,帮助读者全面理解MySQL的数据类型选择。
摘要由CSDN通过智能技术生成

    据我统计,MySQL支持39种(按可使用的类型字段统计,即同义词也作多个)数据类型。下面的介绍可能在非常古老的mysql版本中不适用。

    转载请注明出处:http://blog.csdn.net/anxpp/article/details/51284106。谢谢!

    文本主要参考了官方文档:http://dev.mysql.com/doc/refman/5.7/en/

 

1、概述

    要了解一个数据库,我们也必须了解其支持的数据类型。

    MySQL支持所有标准的SQL数据类型,主要分3类:

  •     数值类型
  •     字符串类型
  •     时间日期类型
    另一类是几何数据类型,用的不多,也没多介绍。     下面大、小标题后括号内的数组表示其含有的类型个数。下面所有结论都经过本人使用MySql Workbench编写SQL验证过或来自官网。

 

2、数值类型(12)

    2.1、整数类型(6)

    一张图就能解释清楚了:

    01

    INTEGER同INT。

    2.2、定点数(2)

    DECIMAL和NUMERIC类型在MySQL中视为相同的类型。它们用于保存必须为确切精度的值。

    使用方式如下:


  
  
  
  1. salary DECIMAL(5,2)

    下面的介绍将基于上面这个例子。

    我们看到其中有两个参数,即DECIMAL(M,D),其中M表示十进制数字总的个数,D表示小数点后面数字的位数,上例中的取值范围为-999.99~999.99。

    如果存储时,整数部分超出了范围(如上面的例子中,添加数值为1000.01),MySql就会报错,不允许存这样的值。

    如果存储时,小数点部分若超出范围,就分以下情况:

  •     若四舍五入后,整数部分没有超出范围,则只警告,但能成功操作并四舍五入删除多余的小数位后保存。如999.994实际被保存为999.99。
  •     若四舍五入后,整数部分超出范围,则MySql报错,并拒绝处理。如999.995和-999.995都会报错。

    M的默认取值为10,D默认取值为0。如果创建表时,某字段定义为decimal类型不带任何参数,等同于decimal(10,0)。带一个参数时,D取默认值。

  •     M的取值范围为1~65,取0时会被设为默认值,超出范围会报错。
  •     D的取值范围为0~30,而且必须<=M,超出范围会报错。

    所以,很显然,当M=65,D=0时,可以取得最大和最小值。

    已经解释很详细了,如还不清楚,请回复。

    2.3、浮点数(3)

    浮点数是用来表示实数的一种方法,它用 M(尾数) * B( 基数)的E(指数)次方来表示实数,相对于定点数来说,在长度一定的情况下,具有表示数据范围大的特点。但同时也存在误差问题。

    如果希望保证值比较准确,推荐使用定点数数据类型。

    MySql中的浮点类型有float,double和real。他们定义方式为:FLOAT(M,D) 、 REAL(M,D) 、 DOUBLE PRECISION(M,D)。

    REAL就是DOUBLE ,如果SQL服务器模式包括REAL_AS_FLOAT选项,REAL是FLOAT的同义词而不是DOUBLE的同义词。

    “(M,D)”表示该值一共显示M位整数,其中D位位于小数点后面。例如,定义为FLOAT(7,4)的一个列可以显示为-999.9999。MySQL保存值时进行四舍五入,因此如果在FLOAT(7,4)列内插入999.00009,近似结果是999.0001。

    FLOAT和DOUBLE中的M和D的取值默认都为0,即除了最大最小值,不限制位数。允许的值理论上是-1.7976931348623157E+308~-2.2250738585072014E-308、0和2.2250738585072014E-308~1.7976931348623157E+308。M、D范围如下(MySql5.7实测,与IEEE标准计算的实际是不同的,下面介绍):

  •     M取值范围为0~255。FLOAT只保证6位有效数字的准确性,所以FLOAT(M,D)中,M<=6时,数字通常是准确的。如果M和D都有明确定义,其超出范围后的处理同decimal。
  •     D取值范围为0~30,同时必须<=M。double只保证16位有效数字的准确性,所以DOUBLE(M,D)中,M<=16时,数字通常是准确的。如果M和D都有明确定义,其超出范围后的处理同decimal。

    FLOAT和DOUBLE中,若M的定义分别超出7和17,则多出的有效数字部分,取值是不定的,通常数值上会发生错误。因为浮点数是不准确的,所以我们要避免使用“=”来判断两个数是否相等。

    MySql中的浮点数遵循IEEE 754标准。

    内存中,FLOAT占4-byte(1位符号位 8位表示指数 23位表示尾数),DOUBLE占8-byte(1位符号位 11位表示指数 52位表示尾数)。IEEE754标准还对尾数的格式做了规范:d.dddddd...,小数点左面只有1位且不能为零,计算机内部是二进制,因此,尾数小数点左面部分总是1。显然,这个1可以省去,以提高尾数的精度。由上可知,单精度浮点数的尾数是用24bit表示的,双精度浮点数的尾数是用53bit表示的。所以就能算出取值范围和准确的有效位数了,但MySql中其实略有不同。

    2.4、BIT(1)

    BIT数据类型可用来保存位字段值。BIT(M)类型允许存储M位值。M范围为1~64,默认为1。

    BIT其实就是存入二进制的值,类似010110。

    如果存入一个BIT类型的值,位数少于M值,则左补0.

    如果存入一个BIT类型的值,位数多于M值,MySQL的操作取决于此时有效的SQL模式:

  •     如果模式未设置,MySQL将值裁剪到范围的相应端点,并保存裁减好的值。
  •     如果模式设置为traditional(“严格模式”),超出范围的值将被拒绝并提示错误,并且根据SQL标准插入会失败。

    下面是官方示例:


  
  
  
  1. mysql> CREATE TABLE t (b BIT(8));
  2. mysql> INSERT INTO t SET b = b'11111111';
  3. mysql> INSERT INTO t SET b = b'1010';
  4. mysql> INSERT INTO t SET b = b'0101';

  
  
  
  1. mysql> SELECT b+0, BIN(b+
MySQL数据类型用于定义数据存储格式和范围。了解MySQL数据类型数据库设计和数据操作的基础。下面是MySQL常见的数据类型及其基本概念: 1. 数值型(Numeric Types): - 整数类型(INT、BIGINT、TINYINT等):用于存储整数值,可以指定有符号或无符号。 - 小数类型(DECIMAL、FLOAT、DOUBLE等):用于存储带有小数部分的数字。 2. 字符型(Character Types): - 字符串类型(CHAR、VARCHAR、TEXT等):用于存储字符序列,具有不同的长度限制和存储方式。 - 二进制类型(BINARY、VARBINARY、BLOB等):用于存储二进制数据(如图像、音频等)。 3. 日期与时间型(Date and Time Types): - 日期类型(DATE):用于存储年月日,格式为'YYYY-MM-DD'。 - 时间类型(TIME):用于存储时分秒,格式为'HH:MM:SS'。 - 日期时间类型(DATETIME、TIMESTAMP):用于存储年月日时分秒。 4. 布尔型(Boolean Type): - 布尔类型(BOOL、BOOLEAN):用于存储逻辑值,包括TRUE和FALSE。 5. 枚举型与集合型(Enumeration and Set Types): - 枚举类型(ENUM):用于存储一组预定义的值之一。 - 集合类型(SET):用于存储一组预定义的值之多个组合。 6. 其他特殊类型: - 自动增长类型(AUTO_INCREMENT):用于在插入数据时自动生成唯一的递增值。 - JSON类型:用于存储和操作JSON格式的数据。 这些数据类型具有不同的存储需求和数据范围,选择合适的数据类型对于数据库设计和性能优化非常重要。在创建表时,需要仔细选择适当的数据类型以确保数据的准确性和高效性。 此外,MySQL还支持用户自定义数据类型(User-defined Types)和空间数据类型(Spatial Data Types),用于满足特定需求,如存储地理位置信息等。 注意,在实际使用,还应考虑存储需求、数据完整性、查询效率等因素来选择适当的数据类型。详细的数据类型列表和使用说明可以参考MySQL官方文档。
评论 22
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值