4

У меня в таблице SQL Server есть «Temp», и там есть столбцы Addr1, Addr2, Addr3, Addr4 и некоторые дополнительные столбцы.Разница в размере SQL Server для столбца

Эти Addr1, Addr2, Addr3 и Addr4 являются типами nvarchar. когда я проверяю размер этого столбца на объект explorer. он показывает их все в nvarchar (100).

enter image description here

Но когда я проверить их с помощью Alt + F1. Он показывает детали в области результатов с длиной 200. Снимок экрана ниже.

enter image description here

почему отличается? Если я ввожу более 100 символов, я получаю ошибки усечения? похоже, что он принимает всего 100 символов.

Не могли бы вы сообщить мне, что задает значение длины?

Thanks, Prakash.

+0

[уже anwered здесь] (http://stackoverflow.com/a/21259797/4366471). –

+1

@WojciechTomczyk это?Этот ответ, похоже, не имеет особого отношения к различию между тем, что вы видите в Object Explorer, по сравнению с результатами 'sp_help', просто утверждает, что значения« NVARCHAR »занимают в два раза больше места для хранения. Если я не понимаю вопрос/ответ, с которым вы связались. – 3N1GM4

+0

@ 3N1GM4 Да, +1 для этого. Я слишком увлечен ссылками на ответы ... –

ответ

9

Поскольку размер указан в обозревателе объектов является количество символов и размер, указанный в результате запроса к sp_help это число байтов .

VARCHAR значения в SQL используют 1 байт на символ, тогда как значения NVARCHAR используют 2 байта на символ. Оба они также нуждаются в 2 байтах - см. Ниже. Поэтому, поскольку вы смотрите на столбцы NVARCHAR, для этого требуется 200 (ну собственно, 202) байтов для хранения 100 символов, где VARCHAR потребуется всего 100 (действительно 102).

Литература:

MSDN: char and varchar

Размер хранения является фактической длиной введенных данных + 2 байта.

MSDN: nchar and nvarchar:

Размер хранилища, в байтах, это два раза фактическая длина введенных данных + 2 байта.

(курсив мой)

MSDN: sp_help:

Отчеты информацию об объекте базы данных (любой объект в списке с точки зрения совместимости sys.sysobjects), определенный пользователем тип данных, или тип данных.

 
    /------------------------------------------------------------------------\ 
    | Column name | Data type | Description         | 
    |-------------+-----------+----------------------------------------------| 
    | Length | smallint | Physical length of the data type (in bytes). | 
    \------------------------------------------------------------------------/ 
+0

Полезно знать! :) –

+0

Спасибо. теперь я получаю это. –

+0

Не стесняйтесь принимать ответ, если он ответил на ваш вопрос @ ps_prakash02 - рад, что я мог бы помочь! – 3N1GM4

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