質問

私は、64ビットの符号なし整数型である値を持っている、と私はunsigned int型を持っていないMongoDBは、それらを格納する必要があります。私は他のフィールドタイプに格納し、内外に行くに変換するための3つの主要な可能性を参照してください。

が署名したint型を使用すると、おそらく最も簡単でスペース効率的であるが、彼らは誰か忘れが変換を行うためにならば、それらのいくつかがエラーを覆い隠す可能性がある、動作します読みやすく、人間じゃないという欠点を持っています。

生のバイナリ多分に対処する経験の浅いプログラマのための最も困難であり、また、非ヒト、読みやすさに苦しんでます。

文字列表現は、効率的な最小スペース(フィールドにつき8つのバイト対Unicodeで〜40バイト)であるが、その後少なくとも可能な値の全てが適切にマッピングされ、文字列への変換のみを照会する代わりにAを必要とされます以上の変換を複雑にします。

単一のドライバ固有のソリューションはオプションではありませんので、私は、これらの値は、異なるプラットフォームから利用できるようにする必要があります。

すべての主要な長所と短所私が見逃していますか?どちらがあなたの

?使います
役に立ちましたか?

解決

私は、文字列の中に数字を突き出すと思います。これは、最も簡単で互換性のソリューションです。最も一般的なプログラミング言語は、その標準ライブラリ内の番号の会話に文字列を提供します。誰か他の人のニーズは異なるプログラムを使用してデータベースを読むためにした場合、後に、彼らはあなたのバイナリストレージ形式把握する必要がありません。別のボーナスは、あなたがする必要がある場合は、符号なしint64型よりも大きな数値を格納することができます。

他のヒント

私は、バイナリで行くと言うだろう - それは、クエリでソート順を得ることは右の些細なことになるだろうどこ上記の唯一のソリューションです。

なぜ、文字列値は、Unicodeでなければならないでしょうか?あなたはせいぜい20のバイトを意味していない標準のvarchar型を使用することができますので、値は常に数字になります知っています。正直に言うと、それは本当に価値がどのように使用するかによって異なります。それは符号なしの64個のint型を使用しているソースに参加するのロットで使用されようとしていますか?もしそうであれば、各列に変換することがあります。 (MongoDBのに参加するとは対照的に)、それは参考のために、または特定の値のためのフィルタに使用されようとしていますか?もしそうなら、文字列値が十分実行されます。

別の解決策は、それが可能であれば、あなたのDBに署名したint型を使用し、その後64 unsigned int型の署名済みバージョンを表し、MongoDBの中で、64署名int型の列を追加することです。この方法では、リンゴとリンゴに参加することができますし、あるシステムから別のシステムに値を比較することができます。

あなたが言ったことを考えると、私はまだvarchar型の列が十分行われることを主張すると、値の人間の読めるします。

編集別の解決策は、符号付き64ビット整数の値を格納し、そのユーザが値を確認できるように、符号なし64ビット値を計算するアイテムにメソッドを追加することであろう。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top