Mysql之数据类型不再迷茫

数值型

  • tinyint 十分小的数据 1个字节
  • smallinit 较小的数据 2个字节
  • mediumint 中等大小的数据 3个字节
  • int 标准的整数 4个字节 常用的 int
  • float 浮点数 4个字节
  • double 浮点数 8个字节(精度问题)
  • decimal 字符串形式的浮点数 金融计算的时候,一般使用

int

int(M)什么意思?

指示最大显示宽度,最大有效显示宽度是255。显示宽度与存储大小或类型包含的值的范围无关

我们指定的INT(10)、INT(11)是指定显示宽度,不是存储大小或者值的范围 。如数字2,20,200显示结果为002,020,200

** MySQL还支持选择在该类型关键字后面的括号内指定整数值的显示宽度(例如,INT(3))。该可选显示宽度规定用于显示宽度小于指定的列宽度的值时从左侧填满宽度。显示宽度并不限制可以在列内保存的值的范围,也不限制超过列的指定宽度的值的显示。 **

说白了,你设置了显示宽度,如果显示的数值的宽度小于设置的值,则左侧用0填充;如果插入的数值宽度大于设置的值,不做任何处理。如果不需要存取负值,建议加上UNSIGNED,对于经常出现的WHERE语句中的字段,考虑加索引,整型适合加索引。
亲测:navicat(12.0.11 64位)手动设置int类型的大小没有什么作用,一旦保存,大小自动回复为0

浮点数

float(M,D)
例如: float(7,4)
范围: -999.9999 到 999.9999

MySQL保存值时进行四舍五入,因此如果在FLOAT(7,4)列内插入999.00009,近似结果是999.0001。

float和double中的M和D的取值默认都为0,即除了最大最小值,不限制位数。
M、D范围:
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,则多出的有效数字部分,取值是不定的,通常数值上会发生错误。因为浮点数是不准确的,所以我们要避免使用“=”来判断两个数是否相等。

decimal

使用方式:即DECIMAL(M,D),例如:

  • M 表示十进制数字总的个数
  • D 表示小数点后面数字的位数
    例如: DECIMAL(5,2)
    范围: -999.99 到 999.99
    M的默认取值为10,D默认取值为0。如果创建表时,某字段定义为decimal类型不带任何参数,等同于decimal(10,0)。带一个参数时,D取默认值。
    M的取值范围为1~65,取0时会被设为默认值,超出范围会报错。
    D的取值范围为0~30,而且必须<=M,超出范围会报错。
    所以,很显然,当M=65,D=0时,可以取得最大和最小值。

字符串

  • char 较小字节位数的字符串(固定长度,未满空格填充,检索操作中那些填补的空格会被过滤掉) 0-255
  • varchar 可变字符串(占用字节位数等于值够用的字节再加上一个用来记录其长度的字节) 0 - 65535 常用的变量(string)
  • tinytext 微型文本 2^8 - 1
  • text 文本串 2^16-1

时间

  • date: YYYY-MM-DD,日期格式
  • time: HH:mm:ss 时间格式
  • datetime: YYYY-MM-DD 日期+时间
  • timestamp 时间戳,1970.1.1到现在的秒数
  • year: 年份

Null

  • 空值,未知
    注意: 不要使用null值进行运算,结果也是null值没有意义。

Guess you like

Origin blog.csdn.net/weixin_47088026/article/details/110248192