Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

SQL Server varbinary bigint със стойностите на BitConverter.ToInt64 са различни

Прехвърляне от varbinary към bigint (и обратно) използва мрежов ред на байтовете (big-endian).BitConverter използва endian-ness на машината, на която се изпълнява (little-endian за 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 по някаква причина или ако искате да бъдете разширими за типове, различни от трите IPAddress.HostToNetworkOrder handeles, използвайте:

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. Какво представлява схемата в SQL Server и как да създадете/препуснете схема в базата данни на SQL Server - SQL Server / TSQL урок, част 27

  2. Скрипт на цялата база данни SQL-Server

  3. Как да анализирате дейността на една база данни в SQL Server

  4. Кой е най-добрият начин за извършване на страниране на SQL Server?

  5. Трудност при записването на Stored Proc за извличане на данни за Jqgrid Pagination