我在SQL Server CE中创建了一个表,并意识到它不支持varchar.
仔细研究一下,我发现"不支持非Unicode文本列(varchar,char,text)和smallmoney;虽然支持nvarchar,nchar,ntext和money",如MSDN所述.
这是真的?这究竟是为什么?似乎一个紧凑的数据库将支持需要较少字节存储的数据类型......我假设它需要更多空间来保存Unicode字符.
这背后的原因是什么?
这可能是因为Windows CE完全基于Unicode,并且所有字符串都以这种方式存储.
我认为他们正在尝试减少部署占用空间并简化界面.那可能是为了避免必须部署更多版本的DLL(unicode与非unicode版本).
是的,他们只支持Unicode.
但这并不意味着它需要2个字节来存储.您可以在数据库层对其进行编码,以便在不需要时基本上剥离第一个字节.许多数据库引擎都是在Unicode上进行压缩的方法.
它只是意味着任何使用两个字节集的条目都会有一个额外标记的轻微开销,告诉引擎该序列使用两个字节.否则,单个字节仍然可以存储到磁盘,并作为RowData读取的一部分进行扩展.
大多数紧凑型数据库在实际将字节放入磁盘时总是使用一种运行长度压缩形式,以节省空间.您从引擎中发现它时遇到的格式很少与实际存储在磁盘上的格式相匹配.