Мне нужно, чтобы 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
чтобы сохранить нули.
Но вы должны быть осторожны с длиной поля, потому что он вернет все остальные числа в нули, поэтому добавьте длину своего поля