MYSQL浮点值可以';如果逗号后面的第一个数字是0,则不更新

MYSQL浮点值可以';如果逗号后面的第一个数字是0,则不更新,mysql,ubuntu,phpmyadmin,Mysql,Ubuntu,Phpmyadmin,我想问一下MySql浮点格式。我尝试插入浮点值,例如12345.66,插入时没有错误,值完全相同。但如果我尝试插入值,如12345.01,则插入的值如下所示12345.00。我尝试过任何具有.0*的值,它总是作为.00插入。为什么会这样 我尝试从终端和phpmyadmin使用MYSQL。 对不起,我的英语不好 以下是我的MYSQL版本: +-------------------------+-------------------------+ | Variable_name

我想问一下MySql浮点格式。我尝试插入浮点值,例如
12345.66
,插入时没有错误,值完全相同。但如果我尝试插入值,如
12345.01
,则插入的值如下所示
12345.00
。我尝试过任何具有
.0*
的值,它总是作为
.00
插入。为什么会这样

我尝试从终端和phpmyadmin使用MYSQL。 对不起,我的英语不好

以下是我的MYSQL版本:

+-------------------------+-------------------------+
| Variable_name           | Value                   |
+-------------------------+-------------------------+
| innodb_version          | 5.7.23                  |
| protocol_version        | 10                      |
| slave_type_conversions  |                         |
| tls_version             | TLSv1,TLSv1.1           |
| version                 | 5.7.23-0ubuntu0.16.04.1 |
| version_comment         | (Ubuntu)                |
| version_compile_machine | x86_64                  |
| version_compile_os      | Linux                   |
+-------------------------+-------------------------+
这是我的创建表。所有浮动都有相同的问题

CREATE TABLE `angsurantempo` ( 
`ID` varchar(20) COLLATE utf8_unicode_ci NOT NULL,
`NoPA` varchar(100) COLLATE utf8_unicode_ci NOT NULL,
`Periode` int(11) NOT NULL,
`TglEfektif` datetime NOT NULL,
`Pokok` float(18,2) NOT NULL,
`Bunga` float(18,2) NOT NULL, 
`Denda` float(18,2) NOT NULL,
`Hari` int(11) NOT NULL,
`TglPost` datetime NOT NULL,
`LogPost` varchar(25) COLLATE utf8_unicode_ci NOT NULL,
`IDKop` varchar(5) COLLATE utf8_unicode_ci NOT NULL,
PRIMARY KEY (`ID`,`IDKop`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
我的插入查询:

INSERT INTO angsurantempo VALUES ('11372','PA-201708-002','15','2017-08-26 00:00:00','1882755.08','2261277.05','0','31','2017-08-30 15:16:00','PAA-201708-007','MAS1')
这个MYSQL服务器安装在VPS Ubuntu中

如果你想插入12345.01,这是不可能的
我认为您不能在小数点后加逗号(,)

您应该使用此命令将表中该字段的数据类型从float更改为double

ALTER TABLE your_table_name
MODIFY your_column_name DOUBLE NOT NULL;

您可以使用
decimal(7,2)
数据类型来存储精确的十进制值。

您可以共享您的表格结构吗?我的意思是在您的终端上,键入此命令
SHOW CREATE TABLE your_TABLE_name\G
我已经编辑了我的问题。添加show create表。感谢您回答我的问题,我无法在MySQL 5.6上复制您的问题。你的
INSERT
查询是什么样子的?我的帖子中包含了一个上传查询。我不能在我的个人电脑和笔记本电脑上复制这个问题。我的笔记本电脑运行的是相同的MYSQL版本,但ubuntu 18和我的电脑运行的是MYSQL版本5.0。如果我在浮点上插入值,并且0是点后的第一个数字,我的笔记本电脑和pc都没有这个问题。不,我的意思是,如果点后的第一个数字是
0
,那么点后的所有值都被设置为
00
,即使我插入了
.01
02
等值,所有这些都变成了
00
我可以看看你表格的结构吗。使用SHOW CREATE TABLE[TABLE name]查询您可以在我的问题中看到。我已经更新了。谢谢你的回答是的,我正在努力。但是为什么我的mysql中只有float不能使用这种格式呢?此服务器正在VPS中运行。这是我的问题。我的电脑上有相同版本的mysql,它可以用这种格式存储值。您的VPS运行的是哪个mysql版本?另外,您是手动插入值还是使用带接口的编程语言somewhere@laurentiuskevin这里的基本问题是
FLOAT(18,2)
是一个有效但无意义的列定义。
FLOAT
数据类型只有4个字节可供使用,因此如果不舍入,则不必存储超过6个有效数字的数字。这里的异常是局部的——VPS的行为更像预期的。除非你有特定的理由这样做,也就是说,“几乎从来没有”——如果你不确定自己是否有这样的理由,那么你就没有这样的理由。使用
DECIMAL
@Michael-sqlbot,这很有意义,谢谢你。是的,工作正常。但我想知道为什么浮点不能存储精确的十进制值?这只发生在我的副总裁身上。在我的本地PC中,float可以存储精确的十进制值。