sql - que - ¿Qué tipo de datos debería uno usar para almacenar hash?
para que se usa elastic search (1)
Entiendo que los hash serán diferentes en función de los diferentes tipos de datos en SQL Server. Un soporte Unicode otro no ... etc. (también colación)
Estoy usando char (32) como un tipo de datos, pero la salida es extraña. Usando esto
select HASHBYTES(''MD5'',''MD5Text'')
da esta salida:
0xA891DB2DA259280A66FD5F35201CAB6A
y cuando
declare @h char(32)
select @h=HASHBYTES(''MD5'',''MD5Text'')
select @h,LEN(@h)
salida:
Ё''Ы-ўY (fэ_5 «j
Así que soy nuevo en SQL Server.
¿Alguien podría decirme qué tipo de datos debo usar para almacenar hashes?
Deberías usar el tipo de datos msdn.microsoft.com/en-us/library/ms188362.aspx . Puede usar binary
lugar de varbinary
porque la función hash siempre devolverá el mismo número de bytes para el mismo tipo de hash (por ejemplo, MD5
, SHA1
, etc.). Esto reducirá la (ligera) sobrecarga requerida para administrar una columna binaria ( varbinary
) de longitud variable.
En términos de qué tamaño hacer, puede ejecutar esta consulta para verificar la longitud de cada tipo de hash:
SELECT DATALENGTH(HASHBYTES(''MD2'', ''Testing'')) AS [MD2Length],
DATALENGTH(HASHBYTES(''MD4'', ''Testing'')) AS [MD4Length],
DATALENGTH(HASHBYTES(''MD5'', ''Testing'')) AS [MD5Length],
DATALENGTH(HASHBYTES(''SHA'', ''Testing'')) AS [SHALength],
DATALENGTH(HASHBYTES(''SHA1'', ''Testing'')) AS [SHA1Length],
/* 2012 only: */
DATALENGTH(HASHBYTES(''SHA2_256'', ''Testing'')) AS [SHA2_256Length],
DATALENGTH(HASHBYTES(''SHA2_512'', ''Testing'')) AS [SHA2_512Length];
Y debería salir con esto:
MD2Length MD4Length MD5Length SHALength SHA1Length SHA2_256Length SHA2_512Length
--------- --------- --------- --------- ---------- -------------- --------------
16 16 16 20 20 32 64