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. Кто за вами потом разгадает, получит удовольствие.
Я тоже считал, что это разрядность используемого целого со знаком.
Тем не менее, MySQL достаточно невнятно ругается при, например, попытке создания внешнего ключа с поля INT(11) на поле INT(10), хотя они по сути одинаковые.
Комментарий для ninjacolumbo.ya.ru:
Я вспомнил, что это основная причина того, что я думал, что это указание размерности.
а я знал! я знал! :))))