Хранение ведущих нулей целых чисел в базе данных MySQL как INTEGER - PullRequest
20 голосов
/ 29 июля 2011

Мне нужен MySQL для хранения чисел в целочисленном поле и поддержания лидирующих нулей. Я не могу использовать опцию zerofill, так как мое текущее поле - Bigint (16), и числа могут отличаться количеством ведущих нулей. IE: 0001 - 0005, затем 008 - 010, возможно, потребуется сохранить. Меня не беспокоит уникальность чисел (они не используются в качестве идентификаторов или чего-либо еще), но мне все еще нужно, чтобы они сохранялись предпочтительно как INTS.

Проблема с использованием CHAR / VARCHAR и последующей типизацией значений как целых чисел в PHP означает, что сортировка результатов с помощью запросов приводит к алфавитно-цифровой сортировке, т.е. IE: SORT BY number ASC выдаст

001
002
003
1
100
101
102
2

Очевидно, что не в числовом порядке, а в буквенно-цифровом порядке, что не требуется.

Надеемся на некоторые хитрые обходные пути:)

Ответы [ 4 ]

22 голосов
/ 29 июля 2011

Сохраните числа, хранящиеся в виде целых чисел.

Затем используйте функцию LPAD(), чтобы показать числа (слева), дополненные нулями:

SELECT LPAD( 14, 7, '0') AS padded;

| padded  |
-----------
| 0000014 |

Если количество символов нулевого заполнения является переменным, добавьте еще один столбец в таблице с этой длиной (нулевого заполнения).

6 голосов
/ 29 июля 2011

Нельзя хранить целые числа с ведущими нулями.Один из способов - сохранить его в столбцах varchar и int.В этом случае вам понадобятся два столбца, одно значение и другое intValue, и во время сортировки вы можете использовать intValue для сортировки.Это легко реализовать.

Select Value from Table order by intValue;

Другим вариантом может быть использование двух столбцов, одного значения и другого NumOfZero, и использовать их для получения желаемых результатов.Это сложно, но может быть плохо для БД.

6 голосов
/ 29 июля 2011

Вы все еще можете сортировать строковые (CHAR / VARCHAR) столбцы как целые числа, используя CAST

ORDER BY CAST(`col_name` AS SIGNED) DESC

Таким образом, вы можете хранить их в полях типа CHAR / VARCHAR.

5 голосов
/ 20 апреля 2016

Измените структуру поля и сделайте Атрибуты UNSIGNED_ZEROFILL, чтобы сохранить нули.

Но вы должны быть внимательны к длине поля, потому что она вернет все остальные числа в нули так,введите длину вашего поля

...