Подтвердить что ты не робот

Хранение ведущих нулей целых чисел в базе данных MySQL как INTEGER

Мне нужно, чтобы 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

Ясно не в порядке чисел, а в алфавитно-цифровом порядке, который не нужен.

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

4b9b3361

Ответ 1

Сохраняйте числа, сохраненные как целые числа.

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

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

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

Если число символов zerofill является переменной, добавьте еще один столбец в таблице с длиной (zerofill).

Ответ 2

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

ORDER BY CAST(`col_name` AS SIGNED) DESC

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

Ответ 3

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

Select Value from Table order by intValue;

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

Ответ 4

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

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