Мне нужно вставить год (например: 1988, 1990 и т.д.) в базу данных. Когда я использовал Date или Datetime тип данных, он показывает ошибки. Какой тип данных я должен использовать.SQL DataType - как хранить год?
ответ
Если вам нужно сохранить год в базе данных, вы должны либо использовать тип данных Integer (если вы только мертвы сохранение года) или тип данных DateTime (который предполагает сохранение даты, которая в основном составляет 1/1/1990 00:00:00 в формате).
Всего год, ничего больше? Почему бы не использовать простое целое число?
Ohh god ,, По здравому смыслу – peter
Эй! Почему вы пытаетесь сделать так просто? У нас будут проблемы SO! –
Используйте целое число, если все, что вам нужно сохранить, - это год. Вы также можете использовать дату и время, если считаете, что будут расчеты, основанные на дате, при запросе этого столбца
спасибо, thats моя ошибка – peter
обычный 4 байта INT - это путь к большому, это пустая трата пространства!
Вы не говорите, какую базу данных вы используете, поэтому я не могу рекомендовать конкретный тип данных. Все говорят «use integer», но большинство баз данных хранят целые числа в 4 байта, что намного больше, чем вам нужно. Вы должны использовать целое число из двух байтов (smallint на SQL Server), которое лучше сохранит пространство.
Чаще всего, тратить пространство, используя int, предпочтительнее использовать меньший тип данных, поскольку большинство современных процессоров являются более эффективной обработкой 4 байтов ints (32 бит), чем меньшие типы данных. – Ender
@ Если вы не используете математику с этими значениями, это скорее процесс хранения и поиска. Вы сможете хранить больше значений в ram, если они меньше, вы сможете читать больше значений с диска, если они меньше, и т. Д. Я не мог найти статей, которые поддерживают вашу идею. http://dba.stackexchange.com/q/4968 –
Все программы компилируются в машинный код в конце, а числа загружаются в регистры. В современных архитектурах процессора все регистры 32-битные или 64-битные. Таким образом, ваша система RDBMS должна будет поместить эти числа в регистры, чтобы провести сравнение, чтобы удовлетворить условия в вашем запросе. А в случае крошечного int и small int, он должен делать конверсию каждый раз, что требует много времени. Вы не можете найти ОФИЦИАЛЬНУЮ статью, поддерживающую мою точку ИЛИ вашу точку, поскольку обычно это компромисс между CPU и IO, поскольку использование int увеличит размер индекса и потребует больше IO – Ender
Эй, вы можете использовать год() datatype в MySQL Он доступен в двухзначном или четырехзначном формате.
Примечание: Допустимые значения в формате четырех цифр: 1901 до 2155. Допустимые значения в формате двузначным: 70 до 69, что составляет лет с 1970 по 2069
Сохранение «Год» в MSSQL идеале зависеть о том, что вы делаете с ним и каково значение этого «года» для вашего приложения и базы данных. Это, как говорится, есть несколько вещей, чтобы заявить здесь. В 2012 году в MSSQL нет «DataType» для Year of the 2012. Я бы склонялся к использованию SMALLINT, так как он всего 2 байта (сэкономит вам 2 из 4 байтов, которые требует INT). Ваше ограничение состоит в том, что вы не можете иметь год старше 32767 (с SQL Server 2008R2). Я действительно не думаю, что SQL будет базой данных по выбору десять тысяч лет, а тем более 32767. Вы можете рассматривать INT как функцию Year() в MSSQL, которая преобразует тип данных «DATE» в INT. Как я уже сказал, это зависит от того, где вы получаете данные и куда они идут, но SMALLINT должен быть в порядке. INT будет излишним ... если у вас нет других причин, подобных тому, что я упоминал выше, или если потребность в коде требует его в форме INT (например, интеграция с существующим приложением). Скорее всего, SMALLINT должен быть в порядке.
Хранение может быть только частью проблемы. Как это значение будет использоваться в запросе?
Будет ли это сопоставлено с другими типами данных даты или времени, или все связанные строки также имеют числовые значения?
Как вы относитесь к изменению требований? Как легко вы могли бы отреагировать на запрос о замене года меньшим временным фрагментом? Теперь они хотят, чтобы он разбился по кварталам?
Цифровой тип может быть легко использован в запросе даты, с помощью таблицы поиска для объединения с такими вещами, как даты начала и окончания (1/1/X-12/31/x) и т. Д. .
** Не ленитесь и «просто используйте int». ** Измените тип данных правильно, два байта int - лучший выбор.Сохраняя 4-значные годы в 4 байтах, вы тратите больше ресурсов, чем просто на дисковое пространство. Ваша система навсегда будет обременена, используя в два раза больше кэш-памяти, нажав вдвое больше данных ввода-вывода и т. Д. Для этого столбца. Это не проблема, см. Http://dba.stackexchange.com/q/4968 –