Гость
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Размер типов данных. / 13 сообщений из 13, страница 1 из 1
26.05.2003, 17:43
    #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
26.05.2003, 17:49
    #32168853
mahoune
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Размер типов данных.
6.2.6 Требования к памяти для различных типов столбцов

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

alter table tbl_countries add country_id INT

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

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

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

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

:-)
...
Рейтинг: 0 / 0
28.05.2003, 15:18
    #32170884
zag
zag
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Размер типов данных.
Мдас.. действительно.. только интресно зачем такое ?? :)
...
Рейтинг: 0 / 0
29.05.2003, 10:22
    #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
29.05.2003, 11:26
    #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
29.05.2003, 11:37
    #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
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Размер типов данных. / 13 сообщений из 13, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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