Отключить научную запись в клиенте командной строки MySQL? - PullRequest
5 голосов
/ 07 февраля 2012

У меня есть таблица 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 <insert-programming-language>.

Спасибо за любые советы.

:: редактировать ::

Вот пример таблицы ...

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 ...

было возможно, это было бы здорово! В противном случае, я не могу потратить время на то, чтобы по отдельности обернуть 100 имен столбцов в «ROUND ()», когда мне нужно проверить некоторые данные.

Интересно, что я иногда использую интерфейс phpMyAdmin для просмотра содержимого некоторых из этих таблиц, и этот интерфейс также имеет это 6 существенное ограничение фигуры. Так что это не ограничивается только CLI.

Ответы [ 3 ]

0 голосов
/ 19 февраля 2012

Разве функция CAST не позволяет запрашивать, чтобы значения для определенного поля возвращались как DECIMAL?Не эксперт и не пробовал, но это будет первое, что я попробую.

0 голосов
/ 21 марта 2018

Я знаю, что это старый, но это помогло мне .. Я использовал представление ..

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

Тогда просто делайте ваши запросы на foo2. также работает в phpmyadmin

0 голосов
/ 15 февраля 2012

Что ж, после прочтения документации более детально, я все еще не вижу никакой причины, по которой клиент ограничился бы отображением только 6 сигов из FLOAT (особенно, когда сама таблица определенно хранит больше).

Тем не менее, приемлемым решением (для этого утомленного пользователя) является изменение всех моих таблиц для использования DECIMAL (16,4) вместо FLOAT.К сожалению, это приводит к тому, что все мои числа отображаются с 4 десятичными знаками (даже если они все равны '0').Но, по крайней мере, все числа теперь имеют одинаковую ширину, и мой клиент никогда не отображает их в научной записи или не ограничивает количество сиг-фиг в своих выходных данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...