Пишу, по большей части, про историю, свою жизнь и немного про программирование.

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. Кто за вами потом разгадает, получит удовольствие.

4 комментария
Orcinus Orca (orcinus.ru) 2012

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

ninjacolumbo (ninjacolumbo.ya.ru) 2012

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

Евгений Степанищев (bolknote.ru) 2012

Комментарий для ninjacolumbo.ya.ru:

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

Bagir 2012

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