如何阻止MySQL十进制字段被舍入?

时间:2012-09-26 04:15:57

标签: php mysql sql

我在MySQL中有一个表,其中包含十进制,长度为9,无符号的字段。我用它来代价。

插入数据并查询后,它全部被舍入并且小数已被删除。

我很困惑为什么。

故障排除提示?


主持人:web.com

phpMyAdmin版本:2.11.10.1

MySQL客户端版本:5.0.95

5 个答案:

答案 0 :(得分:16)

MySQL中的十进制类型有两个调整旋钮:精度和比例。您省略了比例,因此默认为0.

文档(link

  

DECIMAL列的声明语法是DECIMAL(M,D)。 MySQL 5.1中参数的值范围如下:

     

M是最大位数(精度)。它的范围是1到65.(旧版本的MySQL允许范围为1到254.)

     

D是小数点右边的位数(刻度)。它的范围为0到30,且不得大于M.

实施例

mysql> create table test01 (field01 decimal(9));
Query OK, 0 rows affected (0.01 sec)

mysql> insert into test01 (field01) values (123.456);
Query OK, 1 row affected, 1 warning (0.00 sec)

mysql> select * from test01;
+---------+
| field01 |
+---------+
|     123 |
+---------+
1 row in set (0.00 sec)

mysql> create table test02 (field01 decimal(9, 4));
Query OK, 0 rows affected (0.00 sec)

mysql> insert into test02 (field01) values (123.456);
Query OK, 1 row affected (0.01 sec)

mysql> select * from test02;
+----------+
| field01  |
+----------+
| 123.4560 |
+----------+
1 row in set (0.00 sec)

答案 1 :(得分:1)

我遇到了同样的问题。如果输入并假设它为0,则PHPMyAdmin会忽略小数位。 使用alter table query更改它。 ALTER TABLE tablename CHANGE rate rate DECIMAL(30,3)UNSIGNED NOT NULL;

答案 2 :(得分:0)

舍入已完成,因为您可能已将其数据类型设置为int

将其数据类型更改为doubleFloat

这会帮助你。

修改

如果你有数据类型decimal给它的大小像这样编辑。

create table numbers (a decimal(10,2));

答案 3 :(得分:0)

正在进行舍入,因为您需要在类型声明中声明精度

create table test01 (field01 decimal(9,2));

答案 4 :(得分:0)

在PHP / MySQLAdmin中,转到表的结构,单击change,然后将财务数据(美元)的长度(默认为10,0)设置为10,2。