Подтвердить что ты не робот

Почему SQL Server CE не поддерживает varchar?

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

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

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

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

4b9b3361

Ответ 1

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

Ответ 2

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

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

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

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

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