Хранение ведущих нулей целых чисел в базе данных 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 

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

Надеюсь на некоторые умные обходные пути 🙂

    Храните цифры в виде целых чисел.

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

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

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

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

     ORDER BY CAST(`col_name` AS SIGNED) DESC 

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

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

     Select Value from Table order by intValue; 

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

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

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