¿Podemos usar Guid como clave principal en la base de datos de SQL Server?
¿Es posible utilizar GUID como claves primarias en la base de datos SQLITE? Si es posible, ¿qué tipo de datos se puede utilizar?
- ¿Cómo crear programaticamente una conexión A2DP o cómo puedo emular un teléfono Android para ser un fregadero A2DP?
- Android: obtención de uuid de un dispositivo bluetooth
- ¿Cómo paso un uuid en una intención?
- Android Bluetooth - No se puede conectar
- Cómo crear UUID de cadena en android
- Android Encuentra el UUID de un dispositivo bluetooth específico
- Compruebe que el SPU UUID 00001101-0000-1000-8000-00805F9B34FB existe en el servidor
- Android: utiliza UUID como clave principal en SQLite
- Cómo crear UUID al azar en Android cuando el botón haga clic en evento sucede?
- UUID y MACAddress para Bluetooth BLE
- Obtener UUIDs de G-Shock reloj bluetooth android
- Conexión de un WiiMote a un dispositivo Android
- Bluetooth ¿Dónde puedo obtener UUID?
El propio SQLite no admite GUID
como tipo interno.
¡Excepto eso, lo hace! (Una especie de). Recuerde que en SQLite cualquier cadena se puede usar como nombre de tipo y que incluye GUID
o UUID
(lea más acerca de los tipos de datos SQLite ).
De acuerdo con esas reglas, el tipo GUID
tiene afinidad NONE
, que es la misma que para los campos BLOB
. Con esto en mente, puede crear una columna de tipo GUID
y utilizar las siguientes reglas para acceder a ella:
-
Guárdelo como cadena como
X'01020304050607080910111213141516'
(la notación X se utiliza para representar el valorBLOB
16 bytes). Para insertar, utilice:INSERT INTO mytable (uuid) VALUES (X'01020304050607080910111213141516');
-
Lea como
BLOB
16 bytes.quote(uuid)
se puede utilizar para dar formato a la salida usando la notación X:SELECT quote(uuid) FROM mytable
Esta columna también se puede usar como clave primaria. Desafortunadamente, no hay ninguna funcionalidad de AUTOINCREMENT como existe para las llaves primarias enteras – usted tendrá que manejar usted mismo. Puede utilizar algo tan simple como randomblob(16)
para eso, pero no es UUID
como se define por estándar .
Confusamente, también puede almacenar la representación de texto de UUID en el mismo campo (SQLite no le impedirá hacerlo), pero tomará al menos 2 veces más espacio: BLOB es 16 bytes, UUID como texto es al menos 32 bytes.
sqlite3
no tiene un formato UUID de 128 bits nativo, per se.
Sin embargo, los GUID se pueden utilizar como claves en SQLite como TEXT
o una representación BLOB
binaria.
Con base en los números de rendimiento publicados en respuesta a una pregunta similar, los UUID binarios y de cadena pueden ser eficientes en SQLite para crear y consultar cuando se indexan .
Ver tabla en: https://stackoverflow.com/a/11337522/3103448
SQLite puede generar ULOIDES BLOB o TEXT con randomblob(16)
y hex(X)
Por ejemplo: lower(hex(randomblob(16)))
Con una perfomance de índice similar, un trade-off significativo se convierte en si se prefiere una cadena legible humana al tamaño de datos binario más pequeño .