BIT:
- занимает 1 байт, но до 8 полей BIT можно объединить в один BYTE в SQL Server.
- хранит одно из двух значений: 1 (означает «истина») и 0 (означает «ложь»), поэтому столбец должен быть обнуляемым, чтобы значение NULL передавалось как третье значение
CHAR(1)
- занимает 1 байт
- 26 символов, если регистр не учитывает ASCII, против 52, если он чувствителен к регистру
TINYINT
- занимает 1 байт
- значения от нуля до 255
Производительность
Все параметры занимают одинаковое количество места, что делает производительность эквивалентной для JOIN / и т.д.
Сравнение
BIT
не самый мудрый выбор, если есть вероятность изменения возможных значений.CHAR(1)
немедленно читается IE: Y, N, O. TINYINT
является хорошим выбором для первичного ключа в таблице, к которой вы хотите обратиться через внешний ключ, и хранить описательный текст в другом столбце.
Вывод:
CHAR(1)
будет моим выбором, если не использовать отношение внешнего ключа, TINYINT
в противном случае.
При использовании CHAR (1) наличие первичного первичного ключа, состоящего из одного символа, оченьнавряд ли.Предполагать, что естественный ключ, основанный на главном символе, не работает, если у вас есть 2+ слова, начинающиеся с того же символа, и вызывает горе, если метка должна измениться, потому что ключ также должен меняться и сохраняться (если вы не ленивый и не любите объяснятьпочему код не следует той же схеме, что и другие).CHAR (1) также предоставляет примерно пятую часть возможностей (при условии, что верхний предел, 52 значения с учетом регистра), что делает TINYINT - искусственный / суррогатный ключ изолирует от изменений описания.