我在SQL Server CE中创建了一个表,发现它不支持varchar。
通过查找,我发现“不支持非Unicode文本列(varchar、char、text)和smallmoney;尽管支持nvarchar、nchar、ntext和money”作为stated at MSDN。
这是真的吗?这到底是为什么呢?看起来一个紧凑的数据库应该支持占用较少字节来存储的数据类型……我假设它需要更多的空间来保存Unicode字符。
这背后的原因是什么?
发布于 2009-02-23 10:57:05
这可能是因为Windows CE完全基于Unicode,并且它的所有字符串都是以这种方式存储的。
发布于 2009-05-16 05:46:09
我认为他们是在试图减少部署占用的空间并简化界面。这可能是为了避免部署更多版本的DLL (unicode与非unicode版本)。
是的,它们确实只支持Unicode。
但这并不意味着它需要2个字节来存储。您可以在数据库层对其进行编码,基本上在不需要的时候剥离第一个字节。许多数据库引擎将此作为Unicode上的一种压缩方式。
这只是意味着,任何使用双字节集合的条目都会有一个额外的标记来告诉引擎该序列使用了两个字节。否则,单个字节仍然可以存储到磁盘,并作为RowData读取的一部分展开。
大多数紧凑数据库在实际将字节放到磁盘上以节省空间时,总是使用游程长度压缩的形式。当它从引擎出来时,你碰巧看到的格式很少与实际存储在磁盘上的格式相匹配。
https://stackoverflow.com/questions/577209
复制相似问题