Тип MySQL для хранения года: Smallint или Varchar или Date? - PullRequest
15 голосов
/ 04 марта 2009

Я буду хранить год в таблице MySQL: лучше ли хранить это как smallint или varchar? Я полагаю, что поскольку это не полная дата, формат даты не должен быть ответом, но я также включу это.

Smallint? VARCHAR (4)? Дата? что-то еще?

Примеры:

  • 2008

  • 1992

  • 2053

Ответы [ 3 ]

27 голосов
/ 04 марта 2009

Я бы использовал тип столбца YEAR (4) ... но только если ожидаемые годы находятся в диапазоне 1901 и 2155 ... в противном случае см. Ответ Гамбрина.

13 голосов
/ 04 марта 2009

Я бы пошел на small-int - насколько я знаю - varchar занял бы больше места, а также дату. вторым вариантом будет дата.

6 голосов
/ 06 марта 2009

Мой собственный опыт связан с Oracle, у которого нет типа данных YEAR, но я всегда старался избегать использования числовых типов данных для элементов только потому, что они состоят только из цифр. (Таким образом, это включает номера телефонов, номера социального страхования, почтовые индексы, а также дополнительные примеры).

Мое эмпирическое правило - учитывать, для чего используются данные. Если вы будете выполнять математические операции с ним, сохраните его как число. Если вы будете выполнять строковые функции (например, «Взять последние четыре символа SSN» или «Показать номер телефона как (XXX) XXX-XXXX»), то это строка.

Дополнительной подсказкой является требование хранить начальные нули как часть числа.

Кроме того, несмотря на то, что их часто называют «номером телефона», они часто содержат буквы, указывающие на наличие добавочного номера в качестве суффикса. Точно так же стандартный номер книги может заканчиваться на «X» как «контрольная цифра», а международный стандартный серийный номер может заканчиваться на «X» (несмотря на то, что Международный центр ISSN неоднократно называет его 8-значным кодом http://www.issn.org/understanding-the-issn/what-is-an-issn/).

Форматирование телефонных номеров в международном контексте является сложным или естественным, и в соответствии с E.164 требуется, чтобы в кодах вызова страны использовался префикс «+».

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