Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

SQL Server varbinary bigint dengan nilai BitConverter.ToInt64 berbeda

Transmisi dari varbinary ke bigint (dan kembali) menggunakan urutan byte jaringan (big-endian).BitConverter menggunakan endian-ness dari mesin yang menjalankannya (little-endian untuk x86 dan x64).

Karenanya BitConverter.GetBytes dijalankan pada -8588797048854775808 (0x88CE7696E7167800) adalah {0x00,0x88,0xE9,0x18,0x69,0x89,0x31,0x77}, dan cast pada {0x00,0x88,0xE9,0x18,0x69,0x89,0x31,0x77} adalah 0x0088E91869893177 =38536887891734903.

Hal yang jelas untuk dilakukan adalah menyimpan bilangan bulat 64-bit sebagai bilangan bulat 64-bit.

Jika Anda benar-benar perlu melakukan konversi ini, maka:

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

Akan bertukar sekitar byte, sementara juga portabel karena tidak akan menukar byte jika dijalankan pada mesin big-endian.

Atau, jika Anda tidak ingin menggunakan namespace System.Net karena alasan tertentu, atau jika Anda ingin diperluas ke jenis selain dari tiga IPAddress.HostToNetworkOrder pegangan, gunakan:

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



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Apa arti dari simbol SQL # dan bagaimana cara menggunakannya?

  2. TSQL Bulatkan angka desimal

  3. SQL Dinamis - EXEC(@SQL) versus EXEC SP_EXECUTESQL(@SQL)

  4. Cara Membuat Kunci Asing di SQL Server (Contoh T-SQL)

  5. Gabungkan semua geometri dalam tabel SQL Server seperti GeomUnion di Postgres