|
NEWID() Конвертнуть в 16 бит
|
|||
---|---|---|---|
#18+
День добрый! Переношу данные в SQLite, у них ключевое поле BLOB, разработчики говорят что используют GUID, но не строкой, а битами, то есть убирают из GUID "-" и конвертят в байты, как такой финт ушами можно реализовать через SQL Server? ... |
|||
:
Нравится:
Не нравится:
|
|||
03.09.2021, 11:40 |
|
NEWID() Конвертнуть в 16 бит
|
|||
---|---|---|---|
#18+
Код: sql 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
03.09.2021, 11:55 |
|
NEWID() Конвертнуть в 16 бит
|
|||
---|---|---|---|
#18+
spenov, Это просто обрежет результат. Обратно вы не получите то что было с него Код: sql 1. 2. 3. 4. 5.
Я так думаю, что убрав дефисы, нужно по 2 символа переводить в байты A5A78F4143A046A49EB0E4755F1D68FE => A5 A7 8F 41 43 A0 46 A4 9E B0 E4 75 5F 1D 68 FE и получим 16 байт ... |
|||
:
Нравится:
Не нравится:
|
|||
03.09.2021, 12:16 |
|
NEWID() Конвертнуть в 16 бит
|
|||
---|---|---|---|
#18+
Oleg_SQL, Что то вроде такого (для примера несколько вариантов) Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15.
... |
|||
:
Нравится:
Не нравится:
|
|||
03.09.2021, 12:31 |
|
NEWID() Конвертнуть в 16 бит
|
|||
---|---|---|---|
#18+
Mixon, Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42.
... |
|||
:
Нравится:
Не нравится:
|
|||
03.09.2021, 12:59 |
|
NEWID() Конвертнуть в 16 бит
|
|||
---|---|---|---|
#18+
Mixon т GUID, но не строкой, а битами Так GUID, и так по факту, не строка, а биты. Ничо делать не нужно. uniqueidentifier (Transact-SQL) 16-байтовый идентификатор GUID. https://docs.microsoft.com/ru-ru/sql/t-sql/data-types/uniqueidentifier-transact-sql?view=sql-server-ver15 ... |
|||
:
Нравится:
Не нравится:
|
|||
03.09.2021, 13:46 |
|
NEWID() Конвертнуть в 16 бит
|
|||
---|---|---|---|
#18+
Может у автора GUID в базе строкой забиты? uniqueidentifier - это двоичное поле. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.09.2021, 14:15 |
|
NEWID() Конвертнуть в 16 бит
|
|||
---|---|---|---|
#18+
Mixon День добрый! ... используют GUID, но не строкой, а битами, то есть убирают из GUID "-" и конвертят в байты... Вот тут бы узнать как они конвертируют. Судя по всему, раз они что то убирают вручную, то не встроенными средствами? Оказывается (никогда не интересовался подробностями) в MS SQL GUID отображается визуально и хранится по-разному. Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9.
Первые 3 разряда "перевернуты", остальные совпадают. Если они конвертируют так как в строке, то это уже будет не то пальто ... |
|||
:
Нравится:
Не нравится:
|
|||
03.09.2021, 15:16 |
|
NEWID() Конвертнуть в 16 бит
|
|||
---|---|---|---|
#18+
Код: sql 1. 2. 3. 4. 5. 6. 7.
Результат: Код: plaintext 1.
Совпадают 5DFE1204-0D75-46EC-AACC-1E565EDB2030 5DFE1204-0D75-46EC-AACC-1E565EDB2030 ... |
|||
:
Нравится:
Не нравится:
|
|||
03.09.2021, 15:23 |
|
NEWID() Конвертнуть в 16 бит
|
|||
---|---|---|---|
#18+
Wlr-l, select @b сделайте, я про него. Код: sql 1. 2.
... |
|||
:
Нравится:
Не нравится:
|
|||
03.09.2021, 15:26 |
|
NEWID() Конвертнуть в 16 бит
|
|||
---|---|---|---|
#18+
День добрый! У точну ситуацию, я на стороне SQL Server генерил данные(фактически скрипт) для передачи в SQLite, выкрутился следующим способом '''x'+REPLACE(CONVERT(VARCHAR(50), NEWID()),'-','')+'''' ... |
|||
:
Нравится:
Не нравится:
|
|||
03.09.2021, 15:40 |
|
NEWID() Конвертнуть в 16 бит
|
|||
---|---|---|---|
#18+
Oleg_SQL, declare @g uniqueidentifier = '5DFE1204-0D75-46EC-AACC-1E565EDB2030'; declare @b binary(16) = cast(@g as binary(16)) declare @r uniqueidentifier = cast(@b as uniqueidentifier); select @g, @r, @b Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8.
GUID - это 128-битовая последовательность, но конечный пользователь работает с ней как со строкой (ссылку уже дал Алекс2). Согласен, мы не знаем как именно ТС конвертирует байты в байты. Зачем переводить в строку, удалять из нее то, что добавлено при переводе и снова превращать это в байты? ... |
|||
:
Нравится:
Не нравится:
|
|||
03.09.2021, 15:48 |
|
NEWID() Конвертнуть в 16 бит
|
|||
---|---|---|---|
#18+
Спасибо Mixonу. declare @g uniqueidentifier = '5DFE1204-0D75-46EC-AACC-1E565EDB2030'; declare @b binary(16) = cast(@g as binary(16)) declare @r uniqueidentifier = cast(@b as uniqueidentifier); select @g, @r, @b, '0x' + replace(@g, '-', '') 5DFE1204-0D75-46EC-AACC-1E565EDB2030 5DFE1204-0D75-46EC-AACC-1E565EDB2030 0x0412FE5D750DEC46AACC1E565EDB2030 0x5DFE12040D7546ECAACC1E565EDB2030 ... |
|||
:
Нравится:
Не нравится:
|
|||
03.09.2021, 16:04 |
|
NEWID() Конвертнуть в 16 бит
|
|||
---|---|---|---|
#18+
Oleg_SQL Wlr-l, select @b сделайте, я про него. Код: sql 1. 2.
Это ж бред сравнивать строковое представление. Римскими цифрами ишо запишите. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.09.2021, 16:14 |
|
NEWID() Конвертнуть в 16 бит
|
|||
---|---|---|---|
#18+
Mixon '''x'+REPLACE(CONVERT(VARCHAR(50), NEWID()),'-','')+'''' Код: sql 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
03.09.2021, 16:25 |
|
NEWID() Конвертнуть в 16 бит
|
|||
---|---|---|---|
#18+
aleks222 Oleg_SQL Wlr-l, select @b сделайте, я про него. Код: sql 1. 2.
Это ж бред сравнивать строковое представление. Римскими цифрами ишо запишите. я не сравниваю, а считаю, что преобразование в строку и обратно идет по некоему алгоритму. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.09.2021, 16:25 |
|
NEWID() Конвертнуть в 16 бит
|
|||
---|---|---|---|
#18+
https://dba.stackexchange.com/questions/126446/is-there-a-penalty-for-using-binary16-instead-of-uniqueidentifier И все же это не римские цифры. Свой алгоритм. ... The issue with where the binary representation was generated has to do with the byte ordering of the first 3 out of the 4 "fields". If you follow the link above to the Wikipedia article, you will see that RFC 4122 specifies to use "Big Endian" encoding for all 4 fields, yet Microsoft GUIDs specify using "Native" Endianness. Well, Intel architecture is Little Endian, hence the byte order for the first 3 fields is reversed from systems following the RFC (as well as Microsoft-style GUIDs generated on Big Endian systems). The first field, "Data 1", is 4 bytes. In one Endianness it would be represented as (hypothetically) 0x01020304 . But in the other Endianness it would be 0x04030201 . So if the current database's BINARY(16) field was populated from an import file using 0x01020304 binary notation and that binary representation was generated on a system following the RFC, then converting the data currently in the BINARY(16) field into a UNIQUEIDENTIFIER will result in a different GUID than what was originally created. This does not really pose a problem IF the values never left the database, and the values are only ever compared for equality and not ordering ... ... |
|||
:
Нравится:
Не нравится:
|
|||
03.09.2021, 16:49 |
|
|
start [/forum/topic.php?fid=46&msg=40095140&tid=1684334]: |
0ms |
get settings: |
11ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
208ms |
get topic data: |
12ms |
get forum data: |
2ms |
get page messages: |
58ms |
get tp. blocked users: |
2ms |
others: | 306ms |
total: | 618ms |
0 / 0 |