SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 07.12.2011 15:06:19

Neval
Гуру
Откуда: Киев
Зарегистрирован: 11.03.2008
Сообщений: 449

Целочисленное поле, размер меньше чем по умолчанию

Всем известно, что размер целочисленных полей можно уменьшать при необходимости, например SMALLINT(3) вместо стандартного SMALLINT(5). А на практике оказалось, что размер SMALLINT(3) лимитирован размером SMALLINT(5), т.е. от SMALLINT(3) толку нет.

Хотел использовать TINYINT(1) для поля статуса, аля значения 0-9, но оказалось, что в поле без проблем сохраняется и значение 100.
Это всё моя фантазия была или это нормальное поведение? smile


Человек без чувства юмора - не серьёзный человек wink

Неактивен

 

#2 21.12.2011 16:13:20

Neval
Гуру
Откуда: Киев
Зарегистрирован: 11.03.2008
Сообщений: 449

Re: Целочисленное поле, размер меньше чем по умолчанию

Ребят, совсем никто не в курсе? smile Оно не критично, но спортивный интерес всё же имеется)))


Человек без чувства юмора - не серьёзный человек wink

Неактивен

 

#3 21.12.2011 16:53:04

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Целочисленное поле, размер меньше чем по умолчанию

Я ведь тоже когда-то думал, что циферка - это размер поля в байтах. Прямо ностальгия smile
http://sqlinfo.ru/forum/viewtopic.php?id=2258

Неактивен

 

#4 21.12.2011 17:15:15

Neval
Гуру
Откуда: Киев
Зарегистрирован: 11.03.2008
Сообщений: 449

Re: Целочисленное поле, размер меньше чем по умолчанию

Эту циферку я понимаю как количество байт для стрингового представления, в Вашем случае оно же "ширина поля" smile Создаю поле TINYINT(1), добавляю в него значение 100 и при выборке мне возвращается 100, т.е. никаких обрезаний не происходит, отсюда и вопрос возник, должно ж было обрезать smile


Человек без чувства юмора - не серьёзный человек wink

Неактивен

 

#5 21.12.2011 18:25:38

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Целочисленное поле, размер меньше чем по умолчанию

Нет, обрезать не будет.

http://dev.mysql.com/doc/refman/5.0/en/ … butes.html

The display width does not constrain the range of values that can be stored in the column. Nor does it prevent values wider than the column display width from being displayed correctly. For example, a column specified as SMALLINT(3) has the usual SMALLINT range of -32768 to 32767, and values outside the range permitted by three digits are displayed in full using more than three digits.

Неактивен

 

#6 21.12.2011 19:21:33

Neval
Гуру
Откуда: Киев
Зарегистрирован: 11.03.2008
Сообщений: 449

Re: Целочисленное поле, размер меньше чем по умолчанию

Плохо понял написанное, но получается, что явное указание размера поля по сути "пук" ни к чему не приводящий? smile Если всё же эта цифра на что-то влияет, то приведите плз практический пример с полным размером поля и уменьшенным, практика легче воспринимается чем теория smile


Человек без чувства юмора - не серьёзный человек wink

Неактивен

 

#7 21.12.2011 19:46:10

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Целочисленное поле, размер меньше чем по умолчанию

В написанном говориться, что "ширина поля" не может быть ограничением на размер хранимых значений и если хранимой значение по кол-ву символов больше чем "ширина поля", то отображаться значение будет полностью (без обрезания).

Насчет того, когда это нужно на практике, не знаю. Возможно, если вам нужно получить значения определенной ширины, а недостающую часть слева заполнить пробелами или нулями для каких-нибудь почтовых индексов или чего-то ещё, то можно использовать "ширину поля".

mysql> create table a (id smallint(10) zerofill);
Query OK, 0 rows affected (0.48 sec)

mysql> insert into a values(143);
Query OK, 1 row affected (0.16 sec)

mysql> select * from a;
+------------+
| id         |
+------------+
| 0000000143 |
+------------+
1 row in set (0.05 sec)

Неактивен

 

#8 21.12.2011 21:13:32

Neval
Гуру
Откуда: Киев
Зарегистрирован: 11.03.2008
Сообщений: 449

Re: Целочисленное поле, размер меньше чем по умолчанию

Ключевое слово "zerofill", теперь всё понятно, спасибо smile


Человек без чувства юмора - не серьёзный человек wink

Неактивен

 

#9 21.12.2011 21:25:25

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Целочисленное поле, размер меньше чем по умолчанию

zerofill для наглядности. Без него слева будут пробелы. Дока говорит, что ширина поля передается в result set и приложение может её использовать, но как это проиллюстрировать я не знаю. Родной клиент десяток пробелов в отличие от нулей ставить не хочет.

Неактивен

 

#10 21.12.2011 21:57:36

Neval
Гуру
Откуда: Киев
Зарегистрирован: 11.03.2008
Сообщений: 449

Re: Целочисленное поле, размер меньше чем по умолчанию

Ага, я у себя тоже нигде пробелов не увидел smile Но ограничение для zerofill вполне удачное объяснение.


Человек без чувства юмора - не серьёзный человек wink

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson