Хранение ведущих нулей целых чисел в базе данных 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
Ясно не в порядке чисел, а в алфавитно-цифровом порядке, который не нужен.
Надеемся на некоторые умные обходные пути:)
Ответы
Ответ 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
, чтобы сохранить нули.
Но вы должны быть осторожны с длиной поля, потому что он вернет все остальные числа в нули, поэтому добавьте длину своего поля