TL; DRCHAR(9)
.
У вас есть несколько вариантов, большинство из которых упомянуты в комментариях. Варианты имеют разные компромиссы. К ним относятся:
CHAR(9)
. Это использует 9 байтов памяти, но может хранить ведущие нули и может сохранять форматирование в приложениях. Вы можете написать контрольное ограничение, которое гарантирует, что значение всегда содержит 9 цифр. Если вам нужно будет использовать более длинные номера, вы можете легко расширить тип до CHAR(13)
или CHAR(16)
или что угодно.
INTEGER
. Это использует 4 байта памяти. Если вам нужны ведущие нули, вам придется отформатировать их самостоятельно. Если вам понадобится больше цифр, вам нужно будет изменить тип на BIGINT
.
SERIAL
. Это можно использовать в одной таблице и автоматически генерировать новые значения, когда вы вставляете нуль в столбец. Таблицы перекрестных ссылок будут использовать тип INTEGER
.
DECIMAL(9,0)
. Это использует 5 байтов памяти и не хранит ведущие нули, поэтому вам придется отформатировать их самостоятельно. Если вам понадобится больше цифр, вы можете изменить тип на DECIMAL(13,0)
или DECIMAL(16,0)
или что угодно.
BIGINT
и BIGSERIAL
. Это 8-байтовые целые числа, которые могут привести к 16 цифрам без проблем. Вы должны предоставить ведущие нули самостоятельно.
INT8
и SERIAL8
- не используйте эти типы.
VARCHAR(9)
. Не подходит, поскольку длина не является переменной. Это потребует 10 байт на диске, где 9 достаточно.
LVARCHAR(9)
. Это еще менее уместно, чем VARCHAR(9)
.
NCHAR(9)
. Это может быть использовано как по существу эквивалентное CHAR(9)
, но если вы собираетесь хранить цифры, вы также можете использовать CHAR(9)
.
NVARCHAR(9)
. Не подходит по тем же причинам, что VARCHAR(9)
и NCHAR(9)
не подходят.
MONEY(9,0)
. В основном эквивалентно DECIMAL(9,0)
, но может привлечь символы валюты - было бы лучше использовать DECIMAL(9,0)
.
Любой другой тип довольно быстро подходит, если вы не разработать расширенный тип, который использует INTEGER
для хранения, но обеспечивает функцию преобразования в CHAR(9)
, которая добавляет ведущие нули.
Если вас интересует только база данных, зачем включать тег C#?Похоже, тип 'INTEGER' должен быть в порядке - он обрабатывает -2,147,483,647 до +2,147,483,647, так что включает в себя все 9-значные номера ... –
Являются ли номера счетов всегда ровно 9 цифрами или вам нужно хранить как' 0035', и '000000035'? –
@JonSkeet: меня интересует логика, приложение asp.net должно использовать такие данные, не могли бы вы порекомендовать какой-то конкретный тип? –