Почему я не могу изменить свой INT с неподписанного на подписанный? Возможно ли подписать Zerofill?
У меня есть поле под названием NUMBER
в таблице под названием TEST
NUMBER is int(8) Unsigned Zerofill Not Null
Мне нужны отрицательные числа в этом поле, и я все еще хотел бы, чтобы они были заполнены нулями. Например -00023419
Я могу поменять его на подписанный, но, похоже, не могу быть заполнен нулями.
если я сделаю: alter table test modify number int(8) signed zerofill not null
- остается без знака zerofill
если я сделаю: alter table test modify number int(8) zerofill not null
- остается без знака zerofill
если я сделаю: alter table test modify number int(8) signed not null
- Я подписан, но без zerofill
Когда я установил его на подпись, я поставил отрицательное число, затем попытался изменить на zerofill, и число изменилось на 00000000
и все снова было установлено без подписи. Разве нельзя подписать ноль заполненных номеров?
3 ответа
https://dev.mysql.com/doc/refman/5.7/en/numeric-type-attributes.html говорит:
Если вы укажете
ZEROFILL
для числового столбца MySQL автоматически добавляетUNSIGNED
атрибут для столбца.
Отмечено как ошибка в 2006 году, закрыто как "Не ошибка". https://bugs.mysql.com/bug.php?id=24356
Re ваш комментарий:
Так значит ли это, что никто не имеет заполненных отрицательными нулями данных в базе данных mysql?
Правильно. Наиболее распространенный вариант использования ZEROFILL - убедиться, что такие вещи, как почтовые индексы или номера банковских счетов, используют фиксированное количество цифр. В любом случае, эти случаи не поддерживают отрицательные значения, так зачем беспокоиться о таких страшных строках, как -00001234?
Можете ли вы преобразовать его в ноль с PHP?
Да, вы можете форматировать числа с нулями в PHP.
<?php
$n = -1234;
printf("Number is %08d\n", $n);
Выход:
Number is -0001234
Прочитайте http://php.net/manual/en/function.sprintf.php чтобы узнать, что вы можете делать с форматированием. printf()
/sprintf()
,
ZEROFILL подразумевает НЕ ПОДПИСАНО.
Справочное руководство по MySQL https://dev.mysql.com/doc/refman/5.7/en/numeric-type-attributes.html
Если вы указываете ZEROFILL для числового столбца, MySQL автоматически добавляет атрибут UNSIGNED в столбец.
При всех возможных проблемах я избегаю использования нестандартного MySQL ZEROFILL
приписывать.
Хорошо, если ваш столбец является внешним ключом или первичным ключом, MySQL не позволяет этому изменению произойти. Вы должны сделать это заранее.