MySQL数据类型

一. 数据类型介绍

  表内存放的数据要有不同的类型,每种数据类型都要自己的宽度,而且宽度是可以选择的.

二. mysql常用数据类型 :

  1. 数字

    ①. 整型 : tinyint  int  bigint

    ②. 小数 : 

      float : 在位数比较短的情况下不精准

      double : 在位数比较长的情况下不精准

      decimal : 任何为数都精准  //内部是以字符串形式去存储, 推荐使用

  2. 字符串

    ①. char : 简单粗暴, 浪费空间, 存取速度快

    ②. varchar : 精准, 节省空间, 存取速度慢

    ③. sql优化 : 创建表时, 定长的类型往前放, 变长的类型往后放

    ④. 数据>255个字符时, 就把文件的路径放到数据库中.

  3. 时间类型

    ①. datetime

  4. 枚举类型和集合类型

    ①. enum  枚举, 多个选项选择一个

    ②. set  集合, 多选

三. 数值类型

  ※ . 紧跟数值类型后面的数字是显示宽度, 而不是存储宽度. 默认的显示宽度是在最大值的基础上 + 1 .

  ※ . 无符号参数 : unsigned

  ※ .  不足规定显示宽度是使用0补位 : zerofill

  1. tinyint [ n ] [ undigned ] [ zerofill ]

    ①. 小整数, 数据类型用于保存一些范围的整数数值范围 :

    ②. 有符号取值范围 :    即带负号, 允许有负数

      -128 ~ 127

    ③. 无符号取值范围 :    即不带负号,不允许有负数

      0 ~ 255

  2. int   

    ①. 整数, 数据类型用于保存一些范围的整数数值范围 :

    ②. 有符号取值范围 :    即带负号, 允许有负数

      -2147483648 ~ 2147483647

    ③. 无符号取值范围 :    即不带负号,不允许有负数

      0 ~ 4294967295

  3. bigint    

    ①. 整数, 数据类型用于保存一些范围的整数数值范围 :

    ②. 有符号取值范围 :    即带负号, 允许有负数

      -9223372036854775808 ~ 9223372036854775807

    ③. 无符号取值范围 :    即不带负号,不允许有负数

      0 ~ 18446744073709551615

  4. float [ (M, D) ] [ unsigned ] [ zerofill ]

    ①. 单精度浮点数(非准确小数值),M的全长,最大值为255,D是小数点后的位数,最大值为30.

    ②. 有符号取值范围 :    即带负号, 允许有负数

      -3.402823466E+38 ~ 1.175494351E-38,

      1.175494351E-38 ~ 3.402823466E+38

    ③. 无符号取值范围 :    即不带负号,不允许有负数

      1.175494351E-38 ~ 3.402823466E+38

    ④. 精准度随着小数位数的增加而越来越不准确.

  5. double [ (M, D) ] [ unsigned ] [ zerofill ]  

    ①. 双精度浮点数(非准确小数值),M的全长,最大值为255,D是小数点后的位数,最大值为30.

    ②. 有符号取值范围 :    即带负号, 允许有负数

      -1.7976931348623157E+308 ~ 2.2250738585072014,

      2.2250738585072014E-308 ~ 1.7976931348623157E+308

    ③. 无符号取值范围 :    即不带负号,不允许有负数

      2.2250738585072014E-308 ~ 1.7976931348623157E+308

    ④. 精准度随着小数位数的增加而越来越不准确. 但是精度比float要高.

  6. decimal [ M, D ] [ undigned ] [ zerofill ]

    ①. 准确的小数值, M为整数部分的总个数(负号不算),最大值为65.D是小数点后的位数,最大值为30.

    ②. 无论小数有多少位, 精度始终准确.

四. 日期类型

  1. date   年月日的形式

    取值范围 : YYYY-MM-DD (1000-01-01 ~ 9999-12-31)

  2. time  时分秒的形式

    取值范围 : HH:MM:SS ("-838:59:59" ~ "-838:59:59")

  3. datetime  年月日 时分秒的形式

    取值范围 : YYYY-MM-DD HH:MM:SS (1000-01-01 00:00:00 ~ 9999-12-13 23:59:59)

  4. year  年形式

    取值范围 : YYYY (1901~ 2155)

  5. timestamp  年月日时分秒形式

    取值范围 : YYYYMMDD HHMMSS (1970-01-01 00:00:00~2037)

五. 字符类型

  ※ . char和varchar类型后括号内的参数是指字符的长度

  1. char类型 : 定长,简单粗暴,浪费空间,存取速度块

    字符长度范围 : 0 ~ 255 (一个中文是一个字符,是utf8编码的3个字节)

    存储char类型的值时,如果插入的值字符数小于指定字符数,会在插入字符右侧填充空格满足长度.

    

    查询表时,查出的结果会自动删除尾部的空格,如果不想将空格删除需要对mysql设置模式 : set sql_mode = " PAD_CHAR_TO_FULL_LENGTH ";  

    

    查询mysql的默认查询模式命令 : select @@sql_mode;

    

  2. varchar类型 : 变长,精准,节省空间,存取速度慢

    字符长度范围 : 0 ~ 65535(如果大于21845会提示用其他类型. mysql行最大限制为65535字节,字符编码为utf8);

    varchar类型的存储数据为真实的数据,不会使用空格填充. 如果存储的数据中含有空格,空格也会被保存在表内

    varchar类型会在真实数据前加1~2字节的前缀,该前缀用来表示真实数据的字节数,(1~2字节最大表示65535个字节,正好满足mysql对一行的最大字节数)

    如果真实的数据<255字节则需要1字节的前缀(1字节 = 8bit  2**8最大表时数字为255)

    如果真实的数据>255字节则需要2字节的前缀(2字节 = 16bit  2**16最大表示数字为65535)

  3. 查询某一数据的字节或字符数

    字节数 : length() 

    字符数 : char_length()

六. 枚举和集合类型

  一个字段的值只能在给定的范围内选择

  enum 单选 在给定的一个范围内选择一个值, 如 : 性别等

    如果单选字段值插入了多个或不是给定范围内的值,会忽略

  set 多选 在给定的范围内选择多个, 如 : 爱好等

    如果set字段值插入了超出范围的的值,会报错.

原文地址:https://www.cnblogs.com/dong-/p/9671635.html