DataLife Engine > PHP > Какие типы данных поддерживает Mysql?

Какие типы данных поддерживает Mysql?


28 октября 2007. Разместил: podpole
Я не буду описывать подробно все изобилие типов mysql. Я уверен, что это лишнее.
Дело в том, что в mysql-е числовые и текстовые группы типов очень многочисленны.
Отличаются типы в этих группах размером в байтах и возможными модификаторами.
Подробности можно посмотреть в мануале в директории docs каталога с mysql-ем в разделе "7.3 column types".
Там и английский знать особо не нужно - смотрите на название и цифры длины! ;)

Здесь я сделаю обзор самих групп типов данных - для быстрого введение.

mysql поддерживает следующие типы/группы типов данных:

Числовые. Возможные модификаторы: unsigned для объявления беззнаковости,
zerofill для заполнения лидирующих пробелов нулями (имеется в виду внешний вид при выводе).
Могут быть созданы как целые (tinyint, smallint, int, bigint и пр.), так и числа с плавающей точкой (float, double, real и пр.).
Строковые. Возможные модификаторы: binary для объявления поля как бинарного (любые коды хранимых символов), national - модификатор по умолчанию, -
использование набора символов для сортировки, сравнения и пр. Занятный модификатор. Отвечает за конструкцию set-группы: set character set
character_set_name | default, где character_set_name может принимать значение cp1251_koi8.
Однако эти установки выставлены по умолчанию.
Выходит, без модификатора результат тот же, что и с ним.
Я так понял, что эти фишки для будущего использования.
Модификатор для типа char varying создает строковое поле переменной длины.

blob-поля - поля для хранения двоичных данных.
Типы данных, не попавшие в предыдущие три группы:
timestamp - поле хранит дату и время последнего изменения записи.
Это значит, что, добавив в таблицу поле типа timestamp
(например, воспользовавшись конструкцией alter table table_name add column column_name timestamp),
Вы, не производя никаких изменений поля типа timestamp, будете в нем иметь время последней операции с записью,
влияющей на содержимое строки таблицы.
date, time, datetime - поля хранения даты, времени, и того, и другого. Тут, я думаю все ясно.
year - поле, добавленное в версии 3.22, - для хранения года в интервале с 1901 по 2155.
enum - поле, хранящее одно из значений, указанных в списке при создании (модификации структуры) таблицы,
например, alter table tab_name add column col_enum enum('Ага', 'Угу', 'Ну его нафиг').
Теперь поместить в поле col_enum одно из перечисленных значений можно так:
insert into tab_name set col_enum='Ага'
или
update tab_name set col_enum=3.
В последнем случае в col_enum будет значение 'Ну его нафиг'.
Присвоение полю значения не из списка (например, col_enum=7 или col_enum=' format c:') запишет в поле пустую строку (даже не 'null').
тип set в отличии от типа enum предназначен для хранения списка значений, например,
alter table tab_name add column col_set set ('один','два','три','четыре')
Теперь изменим значение поля:
update tab_name set col_set='один' where поле=значение
После такого запроса col_set будет содержать значение 'один'.
update tab_name set col_set=15
Здесь col_set содержит значение 'один,два,три,четыре'.
Да, именно строку с set-значениями, разделенными запятыми. Цифра 15 - это двоичное 1111.
Каждый бит отвечает за свое значение в списке. Например: 1 - 'del', 10 - 'file1.txt', 11 - 'del,file1.txt' и т.д.
Как и в случае с enum установка недопустимого значения записывает в поле пустую строку.