Почему я не могу изменить свой 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 не позволяет этому изменению произойти. Вы должны сделать это заранее.

Другие вопросы по тегам