Рекомендуемые типы данных MySQL

Довольно часто при проектировании очередной базы данных, приходится заново решать какого типа должен быть тот или иной столбец. Например, идентификатор ряда (primary key) – какой тип, INTEGER или INT(8)? А кого типа задать столбец для записи пути файла?

Я не нашел сводных таблиц в Гугле или Яндексе (за исключением вопроса на stackoverflow.com), поэтому решил составить свою. Надеюсь, она будет полезна не только мне. Любые комментарии и дополнения приветствуются.

Столбец Тип данных Комментарий
идентификатор INTEGER AUTO_INCREMENT, UNSIGNED
полное имя VARCHAR(70)  
заголовок VARCHAR(255)  
описание TINYTEXT часто недостаточен из-за ограничений, можно использовать TEXT
текст поста TEXT  
email VARCHAR(254)  
'соль' CHAR(X) строка случайных символов, как правило фиксированной длины
хэш (md5) CHAR(32)  
пол TINYINT UNSIGNED
телефон VARCHAR(20)  
почтовый индекс CHAR(6)  
файл (путь) VARCHAR(255)  
рейтинг (5*) DECIMAL(3,2) UNSIGNED
цена DECIMAL(7,2) UNSIGNED
дата (создания) DATE/DATETIME как правило выводится как дата создания поста/новости (фронтенд)
дата (отслеживание) TIMESTAMP может использоваться для отслеживания редакций поста (бэкенд)
теги, категории TINYTEXT запись в строку с разделителем *
статус TINYINT(1) 1 – published, 0 – unpublished, …

UPD: Я изменил INT(11) в поле id на INTEGER, так как не использую ZEROFILL

UPD2: * по мнению одного моего товарища (@RuSHA), вместо записи в строку лучше пользоваться отдельной таблицей – выборка через LIKE может оказаться куда прожорливей чем грамотно построенный JOIN.

UPD3: поля varchar(n) можно заменить на аналогичные char(n) – это займет больше места, однако, из-за фиксированной длины char скорость выдачи данных увеличится.

comments powered by Disqus