美文网首页js css html
mysql 数据类型

mysql 数据类型

作者: 暴躁程序员 | 来源:发表于2023-02-28 11:33 被阅读0次

一、整数类型

1. 对比
类型                大小        有符号范围                   无符号范围(unsigned)
tinyint            1字节        -128 〜 127                  0 〜 255
smallint           2字节        -32768 〜 32767              0 〜 65535
mediumint          3字节        -8388,608 〜 8388607         0 〜 16777215
int                4字节        ±2147483648(7)               0 〜 4294967295
bigint             8字节        ±9223372036854775808(7)      0 〜 18446744073709551615
2. 注意事项
  1. 整型默认为有符号,通过 unsigned 来设置无符号
  2. 如果插入的值超过整型的范围,那么插入的值为临界值
  3. int(n),整形的数据类型长度n不是数据最大存储,仅代表的是显示位宽,没什么用,一般和zerofill一起使用,达到和超过n位数无效果,未达到n位数用0补位,只在特定客户端下才可看到补位效果

二、小数类型

1. 对比
类型                大小        有符号范围                                              无符号范围(unsigned) 
-- 浮点型(近似值)            
float(M,D)          4字节       -3.402823466E+38~-1.175494351E-38                     0 和 -1.175494351E-38~-3.402823466E+38
double(M,D)         8字节       -1.7976931348623157E+308~-2.2250738585072014E-308     0 和 -2.2250738585072014E-308~-1.7976931348623157E+308

-- 定点型(精确值)(存储方式:字符串)
DECIMAL(M,D)       M+2字节       和double差不多       
2. 注意事项
  1. 精度M和标度D
    M表示总共的位数(整数+小数),D表示保留小数位数,M必须大于D,M范围1~255,D范围1~30
  2. 最大整数位是M-D位,如果插入的小数的整数位大于M-D那么结果是临界值,小数超出保留小数位数则四舍五入比如:类型为 float(4,2) 的字段,插入小数的整数部分最大是99,当插入的值是100时,结果为99.99
  3. FLOAT 和 DOUBLE 不设置M、D时,默认按照存储的值来决定精度,DECIMAL 不指定精度时,默认为(10,0)
  4. FLOAT M>6时,在第6位四舍五入,DOUBLE M>17时在第17位四舍五入,如果是整数位数大于M将四舍五入后用0补位,如果整数位小于M,则在小数位截断
  5. 浮点型和定点型区别
    相同的存储大小,浮点型能表示更大精度的小数(因为:定点型的大小是M+2,float 4字节、double 8字节)
    定点型是以字符串的方式进行存储,相对浮点型,精度更高(货币运算时建议使用定点型,浮点数运算时也容易出问题)

三、字符串类型

1. 对比
类型                允许最大字符           范围                                 优缺点                         
char(M)              M                  0 ~ 255 字符                       固定长度字符串,损耗空间,查询效率高   
varchar(M)           M                  0 ~ 65535 字符                     可变长度字符串,节省空间,查询效率低  

tinytext                                0 ~ 255 字节                       不设置长度,不删除尾部空格,查询效率最低  
text                                    0 ~ 65535 字节                     不设置长度,不删除尾部空格,查询效率最低  
mediumtext                              0 ~ 16777215 字节                  不设置长度,不删除尾部空格,查询效率最低  
longtext                                0 ~ 4294967295 字节                不设置长度,不删除尾部空格,查询效率最低  

enum 枚举         0 ~ 65535 成员(小于255成员占1个字节,大于占2个字节)      只能插入一个枚举的值,或者枚举的索引
set 集合                      0 ~ 64 成员(每8个成员占1个字节)             只能插入1个或多个集合的值,在一个引号中通过逗号分割
2. 注意事项
  1. varchar(4) 和 char(4) 的区别是,当只存入 2 个字节的数据时,varchar(4)实际占用 2+1=3 个字节,char(4) 占用 4 个字节
  2. text 类型,范围单位是字节,不是字符,在utf8编码下,1个中文字符占用3个字节
    即:字节数/3=可存储的中文字符数,text常用于存储文章、评论等,由于查询效率低,作为字段查询时能用varchar类型不用text类型
  3. 创建表时给字段添加 enum 枚举类型 字段名 enum( '值1', '值2','值3' ... ),插入数据时只能插入枚举的值,或者枚举的索引
    插入'值1' 或者 1 或者 '1' 表示插入'值1',如果插入其他值或者不存在的索引,也会插入成功,但是插入的是空值
  4. 创建表时给字段添加 set 集合类型 字段名 set( '值1', '值2','值3' ... ),插入数据时只能插入集合的值
    可插入多个集合值 '值1,值2',如果插入其他值,也会插入成功,但是插入的是空值

四、时间类型

1. 对比
类型                 大小                   范围                                            
year                1字节               1901 ~ 2155                                            
time                3字节               -838:59:59 ~ 838:59:59  
date                3字节               1000-01-01 ~ 9999-12-31         
datetime            8字节               1000-01-01 00:00:00 ~ 9999-12-31 23:59:59           
timestamp           4字节               1970-01-01 00:00:01 UTC ~ 2038-01-19 03:14:07 UTC                          
2. 注意事项
  1. datetime 和 timestamp 都可以存储 YYYY-MM-DD HH:MM:SS 类型的时间
    区别在于 datetime 不受当前时区影响,插入的时间是多少就存多少,timestamp 存储的时间受当前时区time_zone影响
-- 查看当前时区 (默认系统时区)
SHOW VARIABLES LIKE 'time_zone' 

-- 修改当前时区(更改为东八区) 
SET time_zone ='+8:00';

相关文章

网友评论

    本文标题:mysql 数据类型

    本文链接:https://www.haomeiwen.com/subject/jnklldtx.html