mysql float和double类型的区别

mysql float和double类型的区别,第1张

一、数据类型MySQL支持所有标准SQL数值数据类型。这些类型包括严格数值数据类型(INTEGER、SMALLINT、DECIMAL和NUMERIC),以及近似数值数据类型(FLOAT、REAL和DOUBLE PRECISION)。关键字INT是INTEGER的同义词,关键字DEC是DECIMAL的同义词。MySQL支持的整数类型有TINYINT、MEDIUMINT和BIGINT。下面的表显示了需要的每个整数类型的存储和范围。对于小数的表示,MySQL分为两种方式:浮点数和定点数。浮点数包括float(单精度)和double(双精度),而定点数只有decimal一种,在MySQL中以字符串的形式存放,比浮点数更精确,适合用来表示货币等精度高的数据。BIT数据类型保存位字段值,并且支持MyISAM、MEMORY、InnoDB和BDB表。类型大小范围(有符号)范围(无符号)unsigned约束用途TINYINT1 字节(-128,127)(0,255)小整数值SMALLINT2 字节(-32 768,32 767)(0,65 535)大整数值MEDIUMINT3 字节(-8 388 608,8 388 607)(0,16 777 215)大整数值INT或INTEGER4 字节(-2 147 483 648,2 147 483 647)(0,4 294 967 295)大整数值BIGINT8 字节(-9 233 372 036 854 775 808,9 223 372 036 854 775 807)(0,18 446 744 073 709 551 615)极大整数值FLOAT4 字节float(255,30)(-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)单精度浮点数值DOUBLE8 字节double(255,30)(-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)双精度浮点数值DECIMAL对DECIMAL(M,D) ,如果M>D,为M+2否则为D+2double(65,30)依赖于M和D的值依赖于M和D的值小数值1.1 int整数示例# 创建表一个是默认宽度的int,一个是指定宽度的int(5)mysql>create table t1 (id1 int,id2 int(5))Query OK, 0 rows affected (0.02 sec)# 像t1中插入数据1,1mysql>insert into t1 values (1,1)Query OK, 1 row affected (0.01 sec)# 可以看出结果上并没有异常mysql>select * from t1+------+------+| id1 | id2 |+------+------+| 1 | 1 |+------+------+row in set (0.00 sec)# 那么当我们插入了比宽度更大的值,会不会发生报错呢?mysql>insert into t1 values (111111,111111)Query OK, 1 row affected (0.00 sec)# 答案是否定的,id2仍然显示了正确的数值,没有受到宽度限制的影响mysql>select * from t1+------------+--------+| id1 | id2 |+------------+--------+| 0000000001 | 00001 || 0000111111 | 111111 |+------------+--------+rows in set (0.00 sec)

Log File物理结构

从 ib_logfile0和 ib_logfile1这两个文件的物理结构可以看出,在Log Header部分还是有些许差异的, ib_logfile0会多一些额外的信息,主要是checkpoint信息。

并且每个Block的单位是512字节,对应到磁盘每个扇区也是512字节,因此redo log写磁盘是原子写,保证能够写成功,而不像index page一样需要double write来保证安全写入。

我们依次从上到下来看每个Block的结构

Log File Header Block

Log Goup ID,可能会配置多个redo组,每个组对应一个id,当前都是0,占用4字节

Start LSN,这个redo log文件开始日志的lsn,占用8字节

Log File Number,总是为0,占用4字节

Created By,备份程序所占用的字节数,占用32字节

另外在ib_logfile0中会有两个checkpoint block,分别是 LOG_CHECKPOINT_1/ LOG_CHECKPOINT_2,两个记录InnoDB Checkpoint信息的字段,分别从文件头的第二个和第四个block开始记录,并且只在每组log的第一个文件中存在,组内其他文件虽然没有checkpoint相关信息,但是也会预留相应的空间出来。这里为什么有两个checkpoint的呢?原因是设计为交替写入,避免因为介质失败而导致无法找到可用的checkpoint的情况。

Log blocks

请点击输入图片描述

log block结构分为日志头段、日志记录、日志尾部

Block Header,占用12字节

Data部分

Block tailer,占用4字节

Block Header

这个部分是每个Block的头部,主要记录的块的信息

Block Number,表示这是第几个block,占用4字节,是通过LSN计算得来的,占用4字节

Block data len,表示该block中有多少字节已经被使用了,占用2字节

First Rec offet,表示该block中作为第一个新的mtr开始的偏移量,占用2字节

Checkpoint number,表示该log block最后被写入时的检查点的值,占用4字节

问题你的环境是否支持mysqli函数???

例外, 既然打算用mysqli, 那建议用对象方式而不是过程方式:

$DB   = new mysqli('locahost', 'root', '123456', 'db')

$Rult = $DB -> query('select * from table')

$Row  = $Rult - > fetch_assoc()

echo $Row['fild']


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zaji/8541950.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-17
下一篇2023-04-17

发表评论

登录后才能评论

评论列表(0条)

    保存