Этот вопрос связан с моим Размер типа данных SQL
А varchar(max)
вроде может хранить до 2Гб.
Я не могу понять, что в этой ссылке переполнение строки sql М.С. говорит (курсив мой):
Таблица может содержать не более 8 060 байт в строке. В SQL Server 2008 это ограничение ослаблено для таблиц, содержащих столбцы типа varchar, nvarchar, varbinary, sql_variant или CLR, определяемые пользователем. Длина каждого из этих столбцов должна оставаться в пределах 8000 байт.; однако их общая ширина может превышать предел в 8060 байт. Это относится к varchar, nvarchar, varbinary, sql_variant или столбцы определяемого пользователем типа среды CLR при их создании и изменении, а также при обновлении или вставке данных.
Я не понимаю этого утверждения.
Говорят, что varchar(max)
может содержать до 2 ГБ, но в приведенной выше ссылке говорится, что длина столбца не может быть больше 8 КБ
Разве это не противоречие, или я что-то здесь упускаю?
Чтобы прояснить ситуацию, мы могли бы взять первое утверждение, которое является очень фундаментальным:
A table can contain a maximum of 8,060 bytes per row.
Другими словами: каждая строка должна умещаться на одной странице (8 КБ). И если возможно, на одной странице может поместиться много строк, но никогда не наоборот.
Как насчет больших двоичных объектов (ТЕКСТ, NTEXT, BLOB)? Данные в этих столбцах хранятся в специальном месте. Строка просто содержит указатель на данные, поэтому основное утверждение, приведенное выше, остается в силе: строка таблицы должна умещаться на одной странице.
Binary large data is stored outside of the table.
Each table row just holds a pointer in each BLOB field which actually points to the data.
При этом новая функция varchar (max) является особенной и ведет себя следующим образом:
Обратите внимание содержание больших данных зависит от всех остальных столбцов таблицы. Кроме того, varchar (max) может хранить текст в сжатом виде, так что на одной странице данных может поместиться более 8060 символов.
На мой взгляд, заявление Длина каждого из этих столбцов должна оставаться в пределах 8000 байт. кажется неточным, возможно, даже неверным (столбец varchar (max) на самом деле может содержать 2 ГБ данных, но не хранится в строке).