int(?) в MySQL

Кто уверен, что точно знает что означает тип «int(11)» в MySQL? Я именно «интами» не пользовался никогда, всегда заводил через tinyint и т.п., поэтому, глядя на то СУБД в эти скобочки сама подставляет какие-то значения, был уверен, что это размер в каких-то попугаях. Руки не доходили проверить в каких.

Оказывается, это размер да не тот:
int(i) i — это не ограничение разрядности, int всегда одинаков -2³¹ до +2³¹-1 (или 0 до 2³²-1), а ограничение количества показываемых символов при отображении столбца, его значение от 1 до 255. Например, INT(5) объявляет столбец целого типа который при отображении будет выводиться в колонках по пять цифр.

Если в столбце реально записано значение которое нельзя отобразить 5-тью цифрами то оно будет отображено большим количеством символов, т.е. при выводе значение не усекается.
Так что будете заводить в следующий раз таблицу в MySQL, где идут подряд пять целых чисел, задайте им размерности 72, 101, 108, 108 и 111. Получится по кодам «Hello» в кодировке ASCII. Кто за вами потом разгадает, получит удовольствие.
25 сентября 2012 07:59

Orcinus Orca (orcinus.ru)
25 сентября 2012, 08:57

Я тоже считал, что это разрядность используемого целого со знаком.

ninjacolumbo (ninjacolumbo.ya.ru)
25 сентября 2012, 12:19

Тем не менее, MySQL достаточно невнятно ругается при, например, попытке создания внешнего ключа с поля INT(11) на поле INT(10), хотя они по сути одинаковые.

bolk (bolknote.ru)
25 сентября 2012, 13:01, ответ предназначен ninjacolumbo (ninjacolumbo.ya.ru):

Я вспомнил, что это основная причина того, что я думал, что это указание размерности.

Bagir (инкогнито)
25 сентября 2012, 14:31

а я знал! я знал! :))))

Ваше имя или адрес блога (можно OpenID):

Текст вашего комментария, не HTML:

Кому бы вы хотели ответить (или кликните на его аватару)