Я попытался найти это, потому что чувствовал, что это будет часто задаваемый вопрос новичка, но я мог найти только то, что около ответил на это.
У нас есть небольшое PHP-приложение, которое максимально используют 5 человек (всего, когда-либо) и, возможно, 2 одновременно, поэтому масштабируемость не представляет проблемы.
Тем не менее, мне все еще нравится делать что-то наилучшим образом, в противном случае вредные привычки превращаются в постоянные вредные привычки и выливаются в код, который вы пишете, который затрагивает более 5 человек.
Учитывая этот контекст, мой вопрос: есть ли веская причина использовать что-либо, кроме VARCHAR (250+) в MySQL, для небольшого PHP-приложения, которое постоянно развивается / меняется? Если бы я выбрал INT, но позже мне нужно было включить символы, было бы неприятно возвращаться и менять его, когда я мог просто проверить его на будущее и сделать его VARCHAR для начала. Другими словами, выбор чего-либо кроме VARCHAR с большим количеством символов кажется бессмысленным ограничением для небольшого приложения. Это правильно?
Спасибо за чтение и, возможно, ответ!
Одним из основных недостатков будет то, что вам придется добавить проверки согласованности в ваш код. Для небольшой частной базы данных нет проблем. Но для более крупных проектов …
Использование правильных типов сделает много проверок автоматически. Например, есть ли неправильные символы в значении; дата действительна …
В качестве бонуса легко добавить дополнительные ограничения при использовании правильных типов; возраст менее 110 лет; дата начала меньше, чем дата окончания; индексирует существующее значение в другой таблице?
Я предпочитаю делать типы как можно более конкретными. Хотя ошибки сервера могут быть неприятными и их трудно отлаживать, это намного лучше, чем наличие базы данных, которая не согласована.
Если у вас есть цифры от 1 до 12 в VARCHAR
и вам нужны они в числовом порядке, вы получаете 1,10,11,12,2,3,4,5,6,7,8,9. Это нормально? Хорошо ты мог исправить это в SQL, сказав ORDER BY col+0
, Тебе нравится этот клудж?
Вероятно, не очень хорошая идея, чтобы выработать из этого привычку, так как с любым реальным количеством данных станет неэффективным. Если вы используете текстовый тип, объем дискового пространства, используемого для того же объема данных, будет отличаться в зависимости от вашего механизма хранения.
Если вы делаете то, что предложили, не забывайте, что все значения, которые обычно бывают числового типа, должны быть преобразованы в числовой тип в PHP. Например, если вы храните значение «123» как тип varchar или text и извлекаете его как $ someVar, вам нужно будет сделать следующее:
$someVar = intval($someVar);
в PHP перед выполнением арифметических операций, в противном случае PHP будет считать, что 123 — это строка.
Как вы уже знаете, столбцы VARCHAR являются строками переменной длины. У нас есть преимущество динамического выделения памяти при использовании VARCHAR.
VARCHAR хранится в строке вместе с таблицей, что делает быстрее, когда размер разумный.
Если вашему приложению нужна производительность, вы можете использовать CHAR, который немного быстрее, чем VARCHAR.