5

我有一个包含许多数字列(一些 INT,一些 FLOAT)的 MySQL 表。我想用 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,此客户端会以科学计数法显示结果,这使得读取结果变得困难。

我可以通过格式化查询中的每个字段来纠正问题,但是我想查询其中有很多字段和很多表。相反,我希望找到一个可以设置为禁用所有查询的科学记数法的客户端变量或标志。

我无法在页面--helpman页面中找到一个,也无法搜索 Google 或此站点。相反,我发现的只是在使用<insert-programming-language>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。

4

3 回答 3

0

CAST 函数不允许您请求将某个字段的值作为 DECIMAL 返回吗?不是专家,也没有尝试过,但这将是我尝试的第一件事。

于 2012-02-19T01:41:23.363 回答
0

好吧,在更彻底地阅读了文档之后,我仍然看不出为什么客户会限制自己只显示来自 FLOAT 的 6 个 sig 无花果(尤其是当表本身肯定存储更多时)。

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

于 2012-02-14T23:42:07.523 回答
0

我知道这很旧,但这对我有帮助..我使用了一个视图..

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

然后只需对 foo2 进行查询。也适用于 phpmyadmin

于 2018-03-21T04:32:05.610 回答