16

SQL Server CEでテーブルを作成していましたが、varcharをサポートしていないことに気付きました。

これを調べてみると、MSDNで述べられているように、「非Unicodeテキスト列(varchar、char、text)とsmallmoneyはサポートされていません。ただし、nvarchar、nchar、ntext、およびmoneyはサポートされています」 。

これは本当ですか?なぜこれが正確なのですか?コンパクトなデータベースは、格納に必要なバイト数が少ないデータ型をサポートしているように見えます...Unicode文字を保存するためにより多くのスペースが必要だと思います。

この背後にある理由は何ですか?

4

2 に答える 2

11

これはおそらく、Windows CEが完全にUnicodeベースであり、そのすべての文字列がそのように格納されているためです。

于 2009-02-23T10:57:04.757 に答える
10

彼らは展開のフットプリントを減らし、インターフェースを簡素化しようとしていたと思います。それとおそらく、DLLのより多くのバージョン(ユニコードバージョンと非ユニコードバージョン)を展開する必要を回避しようとしています。

そしてそうです、彼らがUnicodeのみをサポートしているのは事実です。

しかし、それは自動的に保存に2バイトかかることを意味するわけではありません。これをデータベース層でエンコードして、基本的に不要なときに最初のバイトを削除できます。多くのデータベースエンジンは、Unicodeでの圧縮の手段としてこれを行います。

これは、2バイトのセットを使用するエントリには、シーケンスが2バイトを使用していることをエンジンに通知する追加のマーカーのわずかなオーバーヘッドがあることを意味します。それ以外の場合は、1バイトをディスクに保存し、RowData読み取りの一部として拡張できます。

ほとんどのコンパクトデータベースは、スペースを節約するために実際にバイトをディスクに配置するときに、常にランレングス圧縮の形式を使用します。エンジンから出力されたときに表示される形式が、実際にディスクに保存されている形式と一致することはめったにありません。

于 2009-05-16T05:46:09.487 に答える