Почему SQL Server CE не поддерживает varchar? - PullRequest
16 голосов
/ 23 февраля 2009

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

Посмотрев на это, я обнаружил, что «текстовые столбцы не в Юникоде (varchar, char, text) и smallmoney не поддерживаются; хотя поддерживаются nvarchar, nchar, ntext и money», как указано в MSDN .

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

В чем причина этого?

Ответы [ 2 ]

11 голосов
/ 23 февраля 2009

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

10 голосов
/ 16 мая 2009

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

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

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

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

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

...