2009-02-23 4 views
16

Я создавал таблицу в SQL Server CE и понял, что она не поддерживает varchar.Почему SQL Server CE не поддерживает varchar?

Подсказка: я нашел, что «текстовые столбцы не-Unicode (varchar, char, text) и smallmoney не поддерживаются, хотя nvarchar, nchar, ntext и money поддерживаются« как stated at MSDN.

Это правда? Почему именно это? Казалось бы, база данных будет поддерживать типы данных, которые принимают меньше байтов для хранения ... Я предполагаю, что для сохранения символов Юникода требуется больше места.

Какова причина этого?

ответ

11

Возможно, это связано с тем, что Windows CE полностью основана на Unicode, и все его строки хранятся таким образом.

10

Я думаю, что они пытались уменьшить площадь развертывания и упростить интерфейс. Это и, вероятно, пытается избежать необходимости развертывать больше версий DLL (unicode vs non-unicode версий).

И да, это правда, что они поддерживают только Юникод.

Но это не означает, что для хранения требуется 2 байта. Вы можете кодировать это на уровне базы данных, чтобы в основном сбрасывать первый байт, когда он не нужен. Многие механизмы баз данных делают это как средство сжатия в Юникоде.

Это просто означает, что любые записи, которые используют два байтовых набора, имеют небольшую накладную часть дополнительного маркера, указывающего двигателю, что последовательность использует два байта. В противном случае один байт может быть сохранен на диске и расширен как часть чтения RowData.

Большинство компактных баз данных всегда используют форму сжатия runlength, когда они фактически помещают байты на диск, чтобы сэкономить место. Формат, который вы видите в нем, когда он выходит из двигателя, редко совпадает с тем, что на самом деле хранится на диске.

+0

Отличный ответ. Мне было любопытно (но не очень важно) о том, как он физически хранится. – enorl76