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

dg9*_*g99 5 mysql formatting command-line scientific-notation

我有一个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;
Run Code Online (Sandbox Code Playgroud)

不幸的是,如果任何数字字段的值超过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 |
+--------------+-------------+------+-----+-------------------+
Run Code Online (Sandbox Code Playgroud)

和一些示例值......

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 |
+------------+--------+--------------+---------------------+
Run Code Online (Sandbox Code Playgroud)

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

88779.5, 1002539.25, 78706.5390625
Run Code Online (Sandbox Code Playgroud)

如果我操纵值,就可以看到它们:

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 |
Run Code Online (Sandbox Code Playgroud)

客户端中的某些东西似乎强制执行我只允许看到六个有效数字,即使表中还有更多数字.

如果查询如

mysql> select ROUND(*, 2) from foo ...
Run Code Online (Sandbox Code Playgroud)

有可能,那会很棒!否则,当我需要检查一些数据时,我无法真正花时间在"ROUND()"中单独包装100个列名.

有趣的是,我偶尔使用phpMyAdmin接口来浏览其中一些表的内容,并且该接口也有这个显着的数字限制.所以它不仅限于CLI.

dg9*_*g99 0

好吧,在更彻底地阅读文档之后,我仍然看不出客户端会限制自己只显示 FLOAT 中的 6 个数字的任何原因(特别是当表本身肯定存储更多时)。

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