powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Размер типов данных.
13 сообщений из 13, страница 1 из 1
Размер типов данных.
    #32168841
zag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
zag
Гость
Привет.
При создании поля в mySQL типа tinyint вместо поля размером в 1 байт поумолчанию создается поле размером в 4 байта.
(alter table tbl_countries add country_id tinyINT)

При создании INT вместо 4 байт получаем 11.
(alter table tbl_countries add country_id INT)

При создании таким образом :
alter table tbl_countries add country_id tinyINT(1) получаю как и надо - 1 байт, но интересно, что при этом я теряю..

Удивительно зачем mySQL понадобились эти дополнительные байты. Я бьюсь за каждый лишний байт в моей таблице, а он их ...

Короче, может кто обьяснить этот пародокс природы ?
...
Рейтинг: 0 / 0
Размер типов данных.
    #32168853
Фотография mahoune
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
6.2.6 Требования к памяти для различных типов столбцов

А как ты просматриваешь размер поля в байтах?
...
Рейтинг: 0 / 0
Размер типов данных.
    #32168907
zag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
zag
Гость
Именно про это я и говорю, что при создании поля в таблице :

alter table tbl_countries add country_id INT

Получаю country_id размером не в 4 байта, а в 11 !!!

Откуда хвост в 7 байт берется ??
...
Рейтинг: 0 / 0
Размер типов данных.
    #32168923
zag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
zag
Гость
просматриваю с помощью MySQL-Front.
...
Рейтинг: 0 / 0
Размер типов данных.
    #32169170
Фотография mahoune
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дай сюда полный перечень действий, после которого у тебя получатся 11 байт.
В виде:
Код: plaintext
1.
2.
3.
CREATE TABLE blah_blah;

ALTER TABLE blah_blah;
...
Рейтинг: 0 / 0
Размер типов данных.
    #32169820
zag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
zag
Гость
Вот после такого получаю:

create table cool(test INT);
...
Рейтинг: 0 / 0
Размер типов данных.
    #32169952
Фотография mahoune
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У меня тоже 11 получилось!
...
Рейтинг: 0 / 0
Размер типов данных.
    #32169954
zag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
zag
Гость
Вот и я о том же !
Представляешь себе, какая разница получается в размере базы данных если есть пара таких полей и сотня другая тысяч записей !
Откуда оно берется - ума не приложу...
...
Рейтинг: 0 / 0
Размер типов данных.
    #32170777
Ryback
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Господа, то что вы принимаете за размер - это precision - число значащих знаков.
Проверте так:
create table cool (test INT(4) );

:-)
...
Рейтинг: 0 / 0
Размер типов данных.
    #32170884
zag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
zag
Гость
Мдас.. действительно.. только интресно зачем такое ?? :)
...
Рейтинг: 0 / 0
Размер типов данных.
    #32171487
Andrew_P
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: plaintext
create table cool (test INT( 4 ));

(4) - это не число значащих знаков, это кол-во байт выделенных под целое число итого получается (256*256*256*256)/2, это число от -2147483648 до 2147483648.

Если требуется беззнаковое целое, то применяйте UNSIGNED:
Код: plaintext
create table cool (test INT( 4 ) UNSIGNED);

итого получается 256*256*256*256, это число от 0 до 4294967296.
...
Рейтинг: 0 / 0
Размер типов данных.
    #32171596
Ryback
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ну вы блин даете.
Ты хотя бы документацию на MySQL почитай, я не говорю уже про стандарт.
Для нецелочисленных типов в скобках (p,s) задается p-количество значащих знаков, s-число отображаемых знаков после запятой.
DECIMAL(5,2) - здесь могут быть отображены числа от -99.99 до 99.99

Для целочисленных типов, в MySQL:
"Another extension is supported by MySQL for optionally specifying the display width of an integer value in parentheses following the base keyword for the type (for example, INT(4)). This optional width specification is used to left-pad the display of values whose width is less than the width specified for the column, but does not constrain the range of values that can be stored in the column, nor the number of digits that will be displayed for values whose width exceeds that specified for the column. "
...
Рейтинг: 0 / 0
Размер типов данных.
    #32171619
Fedorchenko Aleksey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Господа, да когда же вы наконец доки читать научитесь?! Ryback дело вам говорит, а вы рогом уперлись!

Смотрите:
Код: plaintext
1.
2.
3.
4.
The column types supported by MySQL are listed below. The following code letters are used in the descriptions: 

M - Indicates the maximum display size. The maximum legal display size is  255 . 
D - Applies to floating-point types and indicates the number of digits following the decimal point. The maximum possible value is  30 , but should be no greater than M- 2 . 
Square brackets (`[' and `]') indicate parts of type specifiers that are optional.

Код: plaintext
1.
INT[(M)] [UNSIGNED] [ZEROFILL] 
A normal-size integer. The signed range is - 2147483648  to  2147483647 . The unsigned range is  0  to  4294967295 .

Код: plaintext
1.
2.
3.
4.
When asked to store a value in a numeric column that is outside the column type's allowable range, MySQL clips the value to the appropriate endpoint of the range and stores the resulting value instead. 

For example, the range of an INT column is -2147483648 to 2147483647. If you try to insert -9999999999 into an INT column, the value is clipped to the lower endpoint of the range, and -2147483648 is stored instead. Similarly, if you try to insert 9999999999, 2147483647 is stored instead. 

If the INT column is UNSIGNED, the size of the column's range is the same but its endpoints shift up to  0  and  4294967295 . If you try to store - 9999999999  and  9999999999 , the values stored in the column become  0  and  4294967296 


Итого, когда вы видите INT(11) это не означает, что он занимает 11 байт! Это лишь значит, что в него можно записать число, для отображения которого понадобится 11 символов (-2147483648 - знак + 10 цифр). Когда же вы указываете INT(4), то в него можно будет помещать лишь те числа, для отображения которых понадобится 4 символа, т.е. для знаковых от -999 до 999, для беззнаковых от 0 до 9999 вот и все! Если же вы будете пытаться поместить туда большее число, то оно будет урезаться по описанным выше правилам
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Размер типов данных.
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]