#mysql
Начал оптимизацию бд, посчитал, что в функции time 10 цифр. Когда будет 11, то наступит 2400 год. Вопрос: почему люди пишут int(11) вместо int(10)?
Ответы
Ответ 1
Для int`а значение в скобках указывает не на длину значения, не на размер значения, а показывает лишь возможную длину вывода. И только в случае, когда у столбца указан атрибут zerofill Рассмотрим примеры: >> CREATE TABLE test ( id INT, id1 INT(10), id2 INT(11), id3 INT(2), id4 INT(10) ZEROFILL, id5 INT(11) ZEROFILL, id6 INT(2) ZEROFILL ); >> SHOW CREATE TABLE test; CREATE TABLE `test` ( `id` int(11) DEFAULT NULL, `id1` int(10) DEFAULT NULL, `id2` int(11) DEFAULT NULL, `id3` int(2) DEFAULT NULL, `id4` int(10) unsigned zerofill DEFAULT NULL, `id5` int(11) unsigned zerofill DEFAULT NULL, `id6` int(2) unsigned zerofill DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8 >> INSERT INTO test VALUES (1, 1, 1, 1, 1, 1, 1), (111, 111, 111, 111, 111, 111, 111); >> SELECT * FROM test; +------+------+------+------+------------+-------------+------+ | id | id1 | id2 | id3 | id4 | id5 | id6 | +------+------+------+------+------------+-------------+------+ | 1 | 1 | 1 | 1 | 0000000001 | 00000000001 | 01 | | 111 | 111 | 111 | 111 | 0000000111 | 00000000111 | 111 | +------+------+------+------+------------+-------------+------+ Для столбцов id, id1, id2, id3 мы не указали атрибут ZEROFILL и в выводе этих столбцов нет никаких различий даже несмотря на то, что размер вывода для этих столбцов отличается. Для столбцов id4, id5, id6 мы указали атрибут ZEROFILL и для каждого столбца свой размер вывода, поэтому если длина строкового представления числа меньше размера вывода (размера, указанного в скобках), то строковое представление числа будет дополнено нулями слева до требуемой длины. Если же длина строкового представления числа больше размера вывода (столбец id6 и его значение 111), то никакого дополнения нулями не происходит Стоит обратить внимание на поле id - размер вывода для него мы не указывали, но при этом в SHOW CREATE TABLE размер все равно проставлен и равен 11. 11 - т.к. столбец id у нас INT, т.е. целое знаковое, согласно документации там может быть значение равное -2147483648, что как раз равно 11 знакам (10 цифр + знак минус) Если же мы опишем столбец как INT UNSIGNED, то отрицательных значений быть не может (знака минус), а максимальное по длине число равно 4294967295, что равняется 10 знакам. Поэтому для INT UNSIGNED в выводе SHOW CREATE TABLE будет указано INT(10)
Комментариев нет:
Отправить комментарий