sql >> データベース >  >> RDS >> Sqlserver

BitConverter.ToInt64値を持つSQLServer変数bigintが異なります

    varbinaryからのキャスト bigintへ (およびその逆)ネットワークバイトオーダー(ビッグエンディアン)を使用します。BitConverter 実行されているマシンのエンディアンを使用します(x86およびx64の場合はリトルエンディアン)。

    したがって、BitConverter.GetBytes -8588797048854775808(0x88CE7696E7167800)で実行は{0x00,0x88,0xE9,0x18,0x69,0x89,0x31,0x77}であり、cast {0x00,0x88,0xE9,0x18,0x69,0x89,0x31,0x77}の場合は0x0088E91869893177=38536887891734903です。

    明らかなことは、最初に64ビット整数を64ビット整数として格納することです。

    この変換を本当に行う必要がある場合は、次のようにします。

    var savedValue = BitConverter.GetBytes(IPAddress.HostToNetworkOrder(longValue))
    

    ビッグエンディアンマシンで実行された場合にバイトを交換しないという点で移植性もありながら、バイトを交換します。

    または、何らかの理由でSystem.Net名前空間を使用したくない場合、または3つのIPAddress.HostToNetworkOrder以外のタイプに拡張できるようにしたい場合 ハンデレス、使用:

    var savedValue = BitConverter.GetBytes(longValue);
    if(BitConverter.IsLittleEndian)
      Array.Reverse(savedValue);
    



    1. SQLiteでワードラップを有効にする2つの方法

    2. PHPでMySQLAPIを混在させることはできますか?

    3. 日付データ行を使用したMysqlORDERBY

    4. 親子関係のあるDBテーブルを多次元配列に変換する方法