Назначение типа данных MySQL - PullRequest
2 голосов
/ 27 августа 2010

Часто при создании нового веб-приложения и настройке MySQL определенные поля необходимо будет изменять в формате по мере разработки приложения.Например, я могу изменить формат поля даты или поля, которое когда-то было просто int, теперь нужно буква, или нет.Поэтому обычно я просто делаю каждое поле Varchar 255. До тех пор, пока я не закончу, я изменю типы данных на правильные.

Итак, мой вопрос, насколько важны типы данных?Какова цель?Скорость

Ответы [ 3 ]

6 голосов
/ 27 августа 2010

Типы данных чрезвычайно важны - без них невозможно определить, какие данные на самом деле хранятся в столбце. Например, VARCHAR (255) может быть чем угодно - строковым, числовым, датой / временем ... Это очень затрудняет поиск конкретных данных, если вы не можете гарантировать, что это за данные или какая-либо форма согласованности.

Это означает, что типизация данных также обеспечивает базовую проверку - нельзя вставлять буквы в столбец с числовым типом или типом данных даты / времени ...

Скорость извлечения данных также улучшена за счет использования индексов для столбца, но индекс нельзя использовать, если вам необходимо изменить тип данных данных на что-то другое, прежде чем данные можно будет сравнивать.

Хорошо понять, в чем разница между данными и представлением. Как и в случае с форматированием поля даты - это представление, о котором можно легко позаботиться, если тип данных равен DATETIME (или преобразован в DATETIME).

2 голосов
/ 27 августа 2010

Краткий ответ: скорость, оптимальное хранение данных, индекс, возможность поиска.

Ваша база данных может лучше использовать внутреннюю работу, когда все имеет правильный тип данных.Вы также можете лучше использовать специальную функцию базы данных.

Если вы хотите получить все данные за определенный месяц.Вы можете использовать специальные функции базы данных для группировки по месяцам, например, при использовании типа данных «время-дата».При использовании varchar для хранения даты вы теряете все эти функции.

Большинство баз данных могут быстрее находить или извлекать данные из таблицы, когда индекс создан для типа данных INT.Так что, если бы вы создали это поле хранения как varchar, вы бы потеряли производительность

0 голосов
/ 27 августа 2010

Производительность - одна из причин, но до сих пор никто не говорил о выполнении этих типов запросов (что было бы невозможно, если бы все типы были VARCHAR)

SELECT SUM(total) total FROM purchases WHERE status = 'PAID';
SELECT * FROM users WHERE DATE_ADD(last_login, INTERVAL 3 MONTH) < NOW();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...