Это плохая идея использовать CHAR (6) для представления поля год + месяц? - PullRequest
1 голос
/ 30 августа 2011

Я использую MySQL, и у меня есть поле в таблице, в котором нужно хранить значение год + месяц.Поле не требует дня, минуты и второй информации.Я подумываю создать поле как CHAR(6), потому что, кажется, можно использовать >, = и < для сравнения строки.

SELECT '201108' < '201109'
>1

Я хочу использовать этот форматпотому что я могу вставить ту же строку в движок индекса Lucene.Это хорошая идея, или я должен придерживаться DATE?

Ответы [ 4 ]

7 голосов
/ 30 августа 2011

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

Используйте тип даты, вот для чего (a) .Если у него слишком большое разрешение, примените ограничение, согласно которому день всегда будет установлен равным 1. Или установите это с помощью триггера вставки / обновления.

Тогда вы можете использовать весь причудливый код манипуляции датами, который ваш поставщик СУБД уже написал, код, который, вероятно, будет гораздо более эффективным, поскольку он будет работать с собственным двоичным типом, а не с символьной строкой.

И вы сэкономите место в этом конкретном случаеслучай также, поскольку тип MySQL date на короче , чем char(6).Нередко решение о базе данных дает вам преимущество в отношении времени и (обычно это компромисс), поэтому вам следует воспользоваться им, когда вы сможете.


(a) Это относится ко всем этим типам, таким как date, time и datetime.

1 голос
/ 30 августа 2011

Вы хотите использовать дату, но не хранить ничего в поле «День». База данных более эффективна при поиске, чем ваш код, потому что она оптимизирована для поиска, такого как этот. Вы хотите сохранить фиктивное значение в поле День, чтобы сделать эту работу.

0 голосов
/ 30 августа 2011

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

с полем в качестве Типа даты, затем

как дата, которую вы ввели "2011-08-30"

Теперь вам нужен результат, как 201108, запись

выберите DATE_FORMAT («2011-08-30», «% Y% m»);

это даст результат как 201108

для получения более подробной информации о DATE_FORMAT, пожалуйста, посетите

http://davidwalsh.name/format-date-mysql-date_format

0 голосов
/ 30 августа 2011

Ну, так как MySQL требует только 3 байта для хранения даты (Предупреждение: ссылка на MySQL версии 5.0. Проверьте документы для своей версии, чтобы убедиться), было бы лучше из хранилищаточка зрения - а также точка зрения производительности, когда дело доходит до сравнений - использовать date.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...