16

我在 SQL Server CE 中创建了一个表,并意识到它不支持 varchar。

查找此内容,我发现“不支持非 Unicode 文本列(varchar、char、text)和 smallmoney;尽管支持 nvarchar、nchar、ntext 和 money”,如MSDN 所述

这是真的?这是为什么呢?看起来紧凑的数据库将支持需要更少字节来存储的数据类型......我假设它需要更多空间来保存 Unicode 字符。

这背后的原因是什么?

4

2 回答 2

11

这可能是因为 Windows CE 完全基于 Unicode,并且它的所有字符串都以这种方式存储。

于 2009-02-23T10:57:04.757 回答
10

我认为他们试图减少部署空间并简化界面。这可能是为了避免不得不部署更多版本的 DLL(unicode 与非 unicode 版本)。

是的,他们确实只支持 Unicode。

但这并不自动意味着需要 2 个字节来存储。您可以在数据库层对其进行编码,以便在不需要时基本上剥离第一个字节。许多数据库引擎将其作为 Unicode 压缩的一种手段。

这只是意味着任何确实使用两个字节集的条目都有一个额外的标记的轻微开销,告诉引擎该序列正在使用两个字节。否则,仍然可以将单个字节存储到磁盘,并作为 RowData 读取的一部分进行扩展。

大多数紧凑型数据库在实际将字节放入磁盘时总是使用一种运行长度压缩形式以节省空间。当它从引擎中出来时,您碰巧看到的格式很少与实际存储在磁盘上的格式相匹配。

于 2009-05-16T05:46:09.487 回答