#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. Хаха, не волнуйся! Я пытался помочь только с тех пор, как это случилось со мной однажды