如何在MySQL命令行客户端中禁用科学计数法?

5
我有一个包含许多数字列的MySQL表(一些是INT,一些是FLOAT)。我想使用MySQL命令行客户端(具体来说,mysql Ver 14.14 Distrib 5.1.41,for debian-linux-gnu(x86_64)using readline 6.1)进行查询,如下所示:
SELECT * FROM table WHERE foo;

很不幸,如果任何数字字段的值超过10^6,则此客户端会以科学计数法显示结果,这使得阅读结果变得困难。
我可以通过在查询中对每个字段进行格式化来解决问题,但是有很多字段和表格需要查询。相反,我希望找到一个可以设置以禁用所有查询的科学计数法的客户端变量或标志。
我在--help或man页面中没有找到它,也没有在Google或该网站上搜索到它。相反,我发现了一些关于在使用的MySQL API时保留/删除科学计数法的讨论。
感谢您提供的任何提示。
::编辑::
以下是一个示例表...
mysql> desc foo;
+--------------+-------------+------+-----+-------------------+
| Field        | Type        | Null | Key | Default           |
+--------------+-------------+------+-----+-------------------+
| date         | date        | NO   | PRI | NULL              |
| name         | varchar(20) | NO   | PRI | NULL              |
| val          | float       | NO   |     | NULL              |
| last_updated | timestamp   | NO   |     | CURRENT_TIMESTAMP |
+--------------+-------------+------+-----+-------------------+

以及一些示例值...

mysql> select * from foo where date='20120207';
+------------+--------+--------------+---------------------+
| date       | name   | val          | last_updated        |
+------------+--------+--------------+---------------------+
| 2012-02-07 | A      |      88779.5 | 2012-02-07 13:38:14 |
| 2012-02-07 | B      |  1.00254e+06 | 2012-02-07 13:38:14 |
| 2012-02-07 | C      |      78706.5 | 2012-02-07 13:38:15 |
+------------+--------+--------------+---------------------+

现在,我加载到第三个字段中的实际值是:
88779.5, 1002539.25, 78706.5390625

如果我操作数值,它们可以被准确地观察到:

mysql> select date, name, ROUND(val, 10), last_updated from foo where ...
+------------+---+--------------------+---------------------+
| 2012-02-07 | A |   88779.5000000000 | 2012-02-07 13:38:14 |
| 2012-02-07 | B | 1002539.2500000000 | 2012-02-07 13:38:14 |
| 2012-02-07 | C |   78706.5390625000 | 2012-02-07 13:38:15 |

客户端似乎强制我只能看到六个有效数字,即使表格中有更多的数字。

如果查询如下:

mysql> select ROUND(*, 2) from foo ...

如果可能的话,这将是很好的!否则,每当我需要检查某些数据时,我就不能花时间逐个用“ROUND()”包装100个列名。
有趣的是,我偶尔使用phpMyAdmin界面浏览一些表的内容,而该界面也具有这种6个有效数字的限制。因此它不仅仅限于CLI。

科学计数法的创建是为了使大的十进制值更容易阅读。 - Security Hound
我认为你在这里运气不佳。我不认为CLI提供了这个选项。 - Michael Mior
@Ramhound 是的,但是当科学计数法的值与不在其中的值混合在一起时,阅读这些值会更加困难。 - kitti
1
你能展示一下你正在使用的表格的例子吗?我正在使用这个:create table testLength( i int); 并且命令行客户端似乎没有问题,可以返回分解的值。 - technocrat
1
相关:https://dev59.com/vVfUa4cB1Zd3GeqPH2oV - JYelton
显示剩余3条评论
3个回答

0

我知道这已经过时了,但这对我很有帮助.. 我使用了一个视图..

create view foo2 as select date, name, ROUND(val, 10) val, last_updated from foo

然后在foo2上执行您的查询。在phpmyadmin中也可以使用。


谢谢。这不是一个坏的解决方案,但它引入了VIEWs(在MySQL中并不是好事)。 - dg99

0

好的,经过仔细阅读文档后,我仍然看不出为什么客户端会限制从FLOAT中显示仅有6个有效数字(特别是当表本身肯定存储更多数字时)。

尽管如此,对于这个疲惫的用户来说,一个可接受的解决方案是将所有表格都更改为使用DECIMAL(16,4)而不是FLOAT。不幸的是,这使得我的所有数字都显示4位小数(即使它们全部都是“0”)。但至少现在所有数字都具有相同的宽度,并且我的客户端从不以科学计数法显示它们或限制其输出中的有效数字。


0

使用CAST函数是否可以让您请求将某个字段的值作为DECIMAL返回?我不是专家,也没有尝试过,但这应该是我尝试的第一件事。


是的,这个建议和其他每个字段的建议一样好。然而,问题在于如何避免使用任何每个字段操作来获得正确格式的结果。我希望能够编写select * from foo ...并且不看到任何科学计数法。 - dg99

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接