Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

SQL Server varbinary bigint z wartościami BitConverter.ToInt64 są różne

Przesyłanie z varbinary do bigint (i z powrotem) używa sieciowej kolejności bajtów (big-endian).BitConverter używa endianowości maszyny, na której działa (little-endian dla x86 i x64).

Stąd BitConverter.GetBytes Uruchom na -8588797048854775808 (0x88CE7696E7167800) to {0x00,0x88,0xE9,0x18,0x69,0x89,0x31,0x77} i cast na {0x00,0x88,0xE9,0x18,0x69,0x89,0x31,0x77} to 0x0088E91869893177 =38536887891734903.

Oczywistą rzeczą do zrobienia jest po prostu przechowywanie 64-bitowych liczb całkowitych jako 64-bitowych liczb całkowitych.

Jeśli naprawdę potrzebujesz wykonać tę konwersję, to:

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

Zamienia bajty, a jednocześnie jest przenośny, ponieważ nie zamieni bajtów, jeśli zostanie uruchomiony na maszynie typu big-endian.

Alternatywnie, jeśli z jakiegoś powodu nie chcesz używać przestrzeni nazw System.Net lub jeśli chcesz być rozszerzalny na typy inne niż trzy IPAddress.HostToNetworkOrder uchwyty, użyj:

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. Używanie SMO do kopiowania bazy danych i danych

  2. Błąd w zapytaniu sql Nieprawidłowa składnia w pobliżu

  3. Alternatywy SQL Server Management Studio do przeglądania/edycji tabel i uruchamiania zapytań

  4. jak sprawdzić, ile wierszy zostanie dotkniętych przed uruchomieniem zapytania w serwerze microsoft sql 2008

  5. Jak zlokalizować zadania agenta programu SQL Server w Azure Data Studio