2016-12-13 5 views
2

Просто, чтобы накормить свое любопытство:Почему поле IS_NULLABLE в INFORMATION_SCHEMA_COLUMNS является VARCHAR, а не BIT?

Когда вы смотрите на структуру таблицы INFORMATION_SCHEMA_COLUMNS на SQL Server, вы можете увидеть, что столбец IS_NULLABLE выглядит, как показано ниже:

/-------------------------------------------\ 
| Column_name | Type | Computed | Length | 
|-------------+---------+----------+--------| 
| IS_NULLABLE | varchar | no | 3 | 
\-------------------------------------------/ 

В моем сознании, когда вы хотите сохранить логическое значение, лучший тип данных для использования - BIT.

Почему разработчики SQL Server использовали VARCHAR для хранения логического значения?

Является ли причина исторической? Может быть, тип данных BIT не существует?

ответ

0

Во-первых, у них не было much choice:

Информация, вид схемы, включенные в SQL Server соответствуют стандартному определению ISO для INFORMATION_SCHEMA.

То есть, мнения INFORMATION_SCHEMA являются standardized по продуктам SQL - они не были изобретены исключительно для SQL Server (это также объясняет, почему они не содержат много информации, которая является продуктом специфического)

Кроме того, эти представления были стандартизированы хорошо до фактический тип данных булевых был добавлен в SQL Standard (INFORMATON_SCHEMA существует по крайней мере еще в 1992 году. Boolean был добавлен в качестве дополнительного типа данных в 1999 году).Обратите внимание: bit не является булевым типом данных (и он нестандартен) - он определен в документации как числовой тип.

+0

Я не был так далеко. :) Спасибо за это объяснение. – MiniKeb

0

За обложках, Information_schema.columns получает данные от sys.columns, вы можете увидеть то же самое, используя

EXEC sp_helptext [INFORMATION_SCHEMA.COLUMNS]

В Sys.columns, они использовали Is_nullable столбец как BIT , но в [INFORMATION_SCHEMA.COLUMNS] они обобщили его как ниже

convert(varchar(3), CASE c.is_nullable 
WHEN 1 THEN 'YES' ELSE 'NO' END) AS IS_NULLABLE 

Согласно моему пониманию, они могли бы обобщили данные, а затем просто показывает 1 или 0 в этом представлении ..

Посмотрите этот вопрос, а также, зная различия между этими двумя видами

https://dba.stackexchange.com/questions/72742/why-do-sys-columns-and-information-schema-columns-display-different-number-of-co

0

Возможно, вы имеете в виду INFORMATION_SCHEMA.COLUMNS, и это VIEW (а не ТАБЛИЦА), предназначенный для получения удобочитаемой информации.

Столбец IS_NULLABLE в этом представлении возвращает ДА ​​или НЕТ, чтобы люди были более читабельны, чем базовые значения 1 и 0.

Кроме того, существует стандарт ANSI INFORMATION_SCHEMA.*, и в соответствии с этим стандартом должны быть указаны ДА и НЕТ.

+0

Благодарим вас за разъяснение. – MiniKeb

 Смежные вопросы

  • Нет связанных вопросов^_^