Тип MySQL для хранения года: Smallint или Varchar или Date?

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

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

Примеры:

  • 2008

  • 1992

  • 2053

Ответы

Ответ 1

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

Ответ 2

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

Ответ 3

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

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

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

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

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