Подтвердить что ты не робот

Использование UUID в SQLite

Можно ли использовать UUID значения как первичный ключ в SQLite? Я нахожу крайне ограниченную информацию по этой теме, поэтому я не уверен, поддерживает ли SQLite тип данных UUID. Должен ли я хранить UUID в виде строки?

4b9b3361

Ответ 1

SQLite позволяет использовать любой тип данных в качестве первичного ключа.

UUID могут быть сохранены либо как строки (которые читаются человеком), либо как 16-байтовые BLOB (что может быть быстрее, если записи настолько малы, что разница имеет значение).

Ответ 2

Ответ CL правильный, но отчасти обходит вопрос под рукой. Как уже упоминалось, столбец (или несколько столбцов) любого типа может использоваться в качестве первичного ключа. Таким образом, вы можете сохранить UUID в отформатированном, удобочитаемом формате строки и сделать его своим ключом таблицы. А поскольку UUID - это всего лишь 128-битное целое число, вы также можете хранить целочисленные байты в виде BLOB, что, я думаю, будет немного быстрее.

Но чтобы более прямо ответить на то, что, как я полагаю, является вопросом под рукой, нет, SQLite не имеет никаких функций, которые напрямую поддерживают UUID. Когда SQLite создает таблицу, он использует объявленный тип столбца, чтобы определить, какой из пяти базовых классов хранения (целое, реальное, текстовое, blob или null) он будет использовать. Но объявленный тип столбца в противном случае игнорируется. Так что нет никаких UUID-специфических типов столбцов или классов хранения. Также, похоже, нет никаких функций, доступных для преобразования в форматированную строку UUID и обратно. Чтобы получить байты UUID, вам нужно посмотреть, какие методы предоставляются языком, на котором написано ваше приложение. Например, класс UUID Java или Apple NSUUID.

Ответ 3

Не уверен, что использовать его в качестве поля по умолчанию, но если кому - то нужно, чтобы сгенерировать уникальное значение в запросе SQLite следующим подход предложил здесь может быть использован:

Функция randomblob (N) возвращает N-байтовый BLOB-объект, содержащий псевдослучайные байты. Если N меньше 1, то возвращается 1-байтовый случайный двоичный объект. Подсказка: приложения могут генерировать глобально уникальные идентификаторы, используя эту функцию вместе с hex() и/или lower() следующим образом:

hex(randomblob(16)) 

или же

lower(hex(randomblob(16)))