Почему я не могу изменить свой INT с unsigned на signed? Возможно ли обнуление со знаком?

#mysql #integer #unsigned #signed #zerofill

#mysql #целое число #без знака #подписано #обнуление

Вопрос:

У меня есть поле с именем NUMBER в таблице с именем TEST

 NUMBER is int(8) Unsigned Zerofill Not Null
  

Сейчас мне нужны отрицательные числа в этом поле, и я бы все равно хотел, чтобы они были обнулены
Например -00023419

Я могу изменить его на signed, но, похоже, не получается обнулить.

если я это сделаю: alter table test modify number int(8) signed zerofill not null — Обнуление останется без знака

если я это сделаю: alter table test modify number int(8) zerofill not null — Обнуление останется без знака

если я это сделаю: alter table test modify number int(8) signed not null — Я получаю подпись, но обнуления нет

Когда я установил для него значение signed, я ввел отрицательное число, затем попытался изменить на zerofill, и число изменилось на 00000000 , и все снова было установлено на unsigned. Невозможно ли иметь подписанные обнуленные числа?

Комментарии:

1. Вы рассматривали возможность чтения документации?

Ответ №1:

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


Повторите свой комментарий:

Значит ли это, что ни у кого нет данных, заполненных отрицательным нулем в базе данных mysql?

Верно. Наиболее распространенный вариант использования обнуления — убедиться, что такие вещи, как почтовые индексы или номера банковских счетов, содержат фиксированное количество цифр. Эти случаи в любом случае не поддерживают отрицательные значения, так зачем беспокоиться о некрасивых строках типа -00001234?

можете ли вы преобразовать его в zerofilled с помощью PHP?

Да, вы можете форматировать числа с заполнением нулем в PHP.

 <?php

$n = -1234;
printf("Number is dn", $n);
  

Вывод:

 Number is -0001234
  

Читать http://php.net/manual/en/function.sprintf.php для более аккуратного форматирования вы можете использовать printf() / sprintf() .

Комментарии:

1. Значит ли это, что ни у кого нет данных, заполненных отрицательным нулем в базе данных mysql? Если да, то мой следующий вопрос будет таким: можете ли вы преобразовать его в zerofilled с помощью PHP? итак, если в моей базе данных в этом поле указано -23419, мне нужно преобразовать его в -00023419 на моей веб-странице.

Ответ №2:

ЗАПОЛНЕНИЕ НУЛЕМ подразумевает UNSIGNED.

Справочное руководство по MySQL https://dev.mysql.com/doc/refman/5.7/en/numeric-type-attributes.html

Если вы укажете обнуление для числового столбца, MySQL автоматически добавит к столбцу атрибут UNSIGNED.

Учитывая все потенциальные проблемы, я избегаю использования нестандартного атрибута MySQL ZEROFILL .

Ответ №3:

Ну, если ваш столбец является внешним ключом или первичным ключом, MySQL не допускает такого изменения. Вы должны сделать это заранее.

Комментарии:

1. не мой минус, но со сценарием возможно все

2. Хаха, не волнуйся! Я пытался помочь только с тех пор, как это случилось со мной однажды