Типы данных в MySQL (сжатый справочник для PHP программиста)
Раздел:
Programming /
PHP
@
13.08.2008 |
Ключевые слова: php mysql справочник типы данных data types
Автор: Павел Источник: habrahabr
Что и как и как много хранит MySQL?
Данный материал создан специально для программистов, которые быстро смогут определиться какой тип данных лучше выбрать для хранения значений в БД MySQL.
Для затравки, интересная цитата из мануала по MySQL: «Максимальный размер записи в MyISAM составляет 65534 байтов. Каждый BLOB или TEXT-столбец засчитывается здесь как 5-9 байтов.» — как это трактовать однозначно не понятно. НО ясно что много-примного столбцов в таблицу на засунешь. «Извращенистые программисты» — будьте аккуратны (66000 столбцов вы точно создать не сможете).
UPD: Если найдете ошибку, или я что-то где-то утаил — отпишитесь в комментах, с удовольствием добавлю.
UPD1 В первую очередь (и самый лучший вариант для новичков) прочитать ОФИЦИАЛЬНЫЙ МАНУАЛ dev.mysql.com/doc/refman/5.0/en/data-types.html (спасибо Psyh за прямую ссылку), а здесь вырезка для META обработчиков данных (как в лице программистов так и в лице машинной обработки).
UPD2 В принципе, все что написано ниже, можно прочитать по адресу www.mysql.ru/docs/man/Column_types.html (за ссылку «русского перевода», спасибо artuska).
Следующий массив вполне понятен PHP программистам. Да и вообще, любые уважающие себя программисты это поймут.
Например: `int`=>Array(`byte`=>4, `min`=>-2147483648, `max`=>2147483647, `umin`=>0, `umax`=>4294967295),
Трактуется следующим образом: Тип поля INT использует 4 байта для хранения значения. Минимально значение -2147483648, максимальное 2147483647. Беззнаковый INT (unsigned) хранит значения от 0 до 4294967295.
Используется так: Мне надо сохранить в поле максимальное числовое значение 234 259 000 000 000. INT — для этого не подходит. Смотрим другие типы и находим, что BIGINT вполне подойдет.
$MYSQL_TYPES=Array( // INTEGER // byte — кол-во байт на хранение, // max/min — предельные значения, // umax/umin — беззнаковые предельные значения `int`=>Array(`byte`=>4, `min`=>-2147483648, `max`=>2147483647, `umin`=>0, `umax`=>4294967295), `bigint`=>Array(`byte`=>8, `min`=>-9223372036854775808, `max`=>9223372036854775807, `umin`=>0, `umax`=>18446744073709551615), `tinyint`=>Array(`byte`=>1, `min`=>-128, `max`=>127, `umin`=>0, `umax`=>255), `smallint`=>Array(`byte`=>2, `min`=>-32768, `max`=>32767, `umin`=>0, `umax`=>65535), `mediumint`=>Array(`byte`=>3, `min`=>-8388608, `max`=>8388607, `umin`=>0, `umax`=>16777215),
// DECIMAL DECIMAL(M, D) m — кол-во цифр (max 65 цифр), d — сколько из них могут быть после запятой // min_byte/max_byte — краевые значения размера поля в байтах, // byte_formula — формула вычисления размерности // length — максимальное кол-во цифр `decimal`=>Array(`min_byte`=>2, `max_byte`=>67, `byte_formula`=>`(D==0?(M+1):(M+2)`, `length`=>65), `dec`=>Array(`min_byte`=>2, `max_byte`=>67, `byte_formula`=>`D==0?(M+1):(M+2)`, `length`=>65), `numeric`=>Array(`min_byte`=>2, `max_byte`=>67, `byte_formula`=>`D==0?(M+1):(M+2)`, `length`=>65), // FLOAT DOUBLE // Внимание! Не храните денежные значения в этих полях!!! Деньги надо хранить — в DECIMAL // у FLOAT ТОЧНОСТЬ ТОЛЬКО 7 ЦИФР!!! (все остальные цифры «смазываются») // у DOUBLE ТОЧНОСТЬ ТОЛЬКО 15 ЦИФР!!! (все остальные цифры «смазываются») // byte — кол-во байт для хранения поля (по-умолчанию) // max_byte — максимальное кол-во байт для хранения // negative_min/negative_max — минмаксы для отрицательных чисел // positive_min/positive_max — минмаксы для положительных чисел `float`=>Array(`byte`=>4, `max_byte`=>8, `negative_min`=>-3.402823466E+38, `negative_max`=>-1.175494351E-38, `positive_min`=>1.175494351E-38, `positive_max`=>3.402823466E+38), `double`=>Array(`byte`=>8, `negative_min`=>-1.7976931348623157E+308, `negative_max`=>-2.2250738585072014E-308, `positive_min`=>2.2250738585072014E-308, `positive_max`=>1.7976931348623157E+308),
// BOOLEAN // сами все поймете `bool`=>Array(`byte`=>1, `true`=>1, `false`=>0), `boolean`=>Array(`byte`=>1, `true`=>1, `false`=>0), // VARCHAR // byte — кол-во байт отведенных для хранения (можно задать меньше) // min_byte — минимальное кол-во байт в которых может храниться поле (если длина равна 1) // length — максимальная длина символов в поле `varchar`=>Array(`byte`=>256, `min_byte`=>2, `length`=>255), `char`=>Array(`byte`=>256, `min_byte`=>2, `length`=>255), // TEXT // byte — кол-во байт для хранения поля // min_byte — минимальное кол-во байт для хранения одного символа (если длина поля равна 1) // length — максимальное количество символов в поле `tinytext`=>Array(`byte`=>256, `min_byte`=>2, `length`=>255), `text`=>Array(`byte`=>65537, `min_byte`=>3, `length`=>65535), `mediumtext`=>Array(`byte`=>16777219, `min_byte`=>4, `length`=>16777215), `longtext`=>Array(`byte`=>4294967300, `min_byte`=>5, `length`=>4294967296), `tinyblob`=>Array(`byte`=>256, `min_byte`=>2, `length`=>255), `blob`=>Array(`byte`=>65537, `min_byte`=>3, `length`=>65535), `mediumblob`=>Array(`byte`=>16777219, `min_byte`=>4, `length`=>16777215), `longblob`=>Array(`byte`=>4294967300, `min_byte`=>5, `length`=>4294967296), // DATETIME // byte — кол-во байт для хранения значения поля // mask — стандартная маска ввода значения (есть куча других вариантов, о них читайте в мануале) // min/max — минимальные максимальные значения дат которые сохраняют поля `datetime`=>Array(`byte`=>8, `mask`=>`YYYY-MM-DD HH: MM: SS`, `min`=>`1000-01-01 00:00:00`, `max`=>`9999-12-31 23:59:59`), `date`=>Array(`byte`=>3, `mask`=>`YYYY-MM-DD`, `min`=>`1000-01-01`, `max`=>`9999-12-31`), `time`=>Array(`byte`=>3, `min`=>`-838:59:59`, `max`=>`838:59:59`), `year`=>Array(`byte`=>1, `min`=>1901, `max`=>2155), `timestamp`=>Array(`byte`=>4, `mask`=>Array(14=>`YYYYMMDDHHMMSS`,12=>`YYMMDDHHMMSS`,10=>`YYMMDDHHMM`,8=>`YYYYMMDD`,6=>`YYMMDD`,4=>`YYMM`,2=>`YY`), `min`=>1970, `max`=>2036 ), // ENUM // byte — кол-во байт на хранение поля // max_byte — максимальное кол-во байт, которое можно достигнуть при максимальном кол-ве элементов // max_number_of_element — кол-во элементов, которое может содержать поле `enum`=>Array(`byte`=>1, `max_byte`=>2, `max_number_of_element`=>65535), `set`=>Array(`byte`=>1, `max_byte`=>8, `max_number_of_element`=>64) );
Это интересно:
Распечатать статью
Вернуться в раздел:
Programming /
PHP
Реклама:
|