DISABILITARE ADBLOCK

ADBlock sta bloccando alcuni contenuti del sito

ADBlock errore

Qual è la lunghezza della stringa di un GUID?

StackOverflow https://stackoverflow.com/questions/968175

DOMANDA

Voglio creare una colonna varchar in SQL che dovrebbe contenere N'guid' mentre guid è un GUID generato da NET ( Guid.NewGuid ) -. classe System.Guid

Qual è la lunghezza del varchar devo aspettarmi da un GUID? E 'una lunghezza statica?

Dovrei usare nvarchar (sarà GUID mai utilizzare i caratteri Unicode)?

varchar(Guid.Length)

PS. Non voglio usare una riga SQL guid tipo di dato. Sto solo chiedendo che cosa è Guid.MaxLength.

SOLUZIONE

Dipende da come si formatta il Guid:

  • Guid.NewGuid().ToString() => 36 caratteri (un trattino)
    uscite: 12345678-1234-1234-1234-123456789abc

  • Guid.NewGuid().ToString("D") => 36 caratteri (con trattino, stesso ToString())
    uscite: 12345678-1234-1234-1234-123456789abc

  • Guid.NewGuid().ToString("N") => 32 caratteri (solo cifre)
    uscite: 12345678123412341234123456789abc

  • Guid.NewGuid().ToString("B") => 38 caratteri (parentesi graffe)
    uscite: {12345678-1234-1234-1234-123456789abc}

  • Guid.NewGuid().ToString("P") => 38 caratteri (parentesi)
    uscite: (12345678-1234-1234-1234-123456789abc)

  • Guid.NewGuid().ToString("X") => 68 caratteri (esadecimale)
    uscite: {0x12345678,0x1234,0x1234,{0x12,0x34,0x12,0x34,0x56,0x78,0x9a,0xbc}}

ALTRI SUGGERIMENTI

36, e il GUID utilizza solo 0-9A-F (esadecimale!).

12345678-1234-1234-1234-123456789012

Questo è 36 caratteri in ogni GUID - sono di lunghezza costante. Si può leggere un po 'di più circa la complessità del GUID qui .

Sarà necessario due in più di lunghezza, se si desidera memorizzare le parentesi graffe.

Nota: 36 è la lunghezza della stringa con i trattini in mezzo. Essi sono in realtà i numeri a 16 byte.

corretta cosa da fare è quello di conservarlo come uniqueidentifier - questo è quindi completamente indicizzabile, ecc al database. La prossima opzione migliore sarebbe una colonna binary(16):. GUID standard sono esattamente 16 byte di lunghezza

Se è necessario archiviare come una stringa, la lunghezza veramente scende a come si sceglie di codificare. Come esadecimale (AKA base 16 codifica) senza trattini sarebbe 32 caratteri (due cifre esadecimali per byte), quindi char(32).

Tuttavia, si potrebbe voler per memorizzare i trattini. Se siete a corto di spazio, ma il database non supporta blob / GUID in modo nativo, è possibile utilizzare la codifica Base64 e rimuovere la == imbottitura suffisso; che ti dà 22 caratteri, in modo char(22). Non v'è alcuna necessità di utilizzare Unicode, e senza bisogno di lunghezza variabile -. Così nvarchar(max) sarebbe una cattiva scelta, ad esempio

Credo GUID sono costretti a lunghezze di 16 byte (o 32 byte per un ASCII equivalente esadecimale).

GUID sono 128bits, o

0 through ffffffffffffffffffffffffffffffff (hex) or 
0 through 340282366920938463463374607431768211455 (decimal) or 
0 through 11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 (binary, base 2) or 
0 through 91"<b.PX48m!wVmVA?1y (base 95)

Quindi sì, numero minimo di 20 caratteri, che in realtà è sprecare più di 4,25 bit, in modo da poter essere altrettanto efficace utilizzando basi più piccole di 95 così; Base 85 essendo il più piccolo possibile che si adatta ancora in 20 caratteri:

0 through -r54lj%NUUO[Hi$c2ym0 (base 85, using 0-9A-Za-z!"#$%&'()*+,- chars)

: -)

22 byte, se lo si fa in questo modo:

System.Guid guid = System.Guid.NewGuid();
byte[] guidbytes = guid.ToByteArray();
string uuid = Convert.ToBase64String(guidbytes).Trim('=');

stringhe binarie memorizzare dati grezzi byte, mentre il testo personaggio stringhe negozio. Utilizzare i dati binari quando memorizzare valori hexi decimali come SID, GUID e così via. Il tipo di dati uniqueidentifier contiene un identificatore univoco globale o GUID. Questo valore deriva utilizzando la funzione NEWID () per restituire un valore che è unico per tutti gli oggetti. E 'memorizzato come un valore binario, ma è visualizzato come una stringa di caratteri.

Ecco un esempio.

USE AdventureWorks2008R2;
GO
CREATE TABLE MyCcustomerTable
(
    user_login   varbinary(85) DEFAULT SUSER_SID()
    ,data_value   varbinary(1)
);
GO

INSERT MyCustomerTable (data_value)
    VALUES (0x4F);
GO

Si applica a: SQL Server L'esempio seguente crea la tabella Cust con un tipo di dati uniqueidentifier e utilizza NEWID per riempire il tavolo con un valore predefinito. Nell'assegnare il valore predefinito di NEWID (), ogni riga nuova ed esistente ha un valore unico per la colonna CustomerID.

-- Creating a table using NEWID for uniqueidentifier data type.  
CREATE TABLE cust  
(  
 CustomerID uniqueidentifier NOT NULL  
   DEFAULT newid(),  
 Company varchar(30) NOT NULL,  
 ContactName varchar(60) NOT NULL,   
 Address varchar(30) NOT NULL,   
 City varchar(30) NOT NULL,  
 StateProvince varchar(10) NULL,  
 PostalCode varchar(10) NOT NULL,   
 CountryRegion varchar(20) NOT NULL,   
 Telephone varchar(15) NOT NULL,  
 Fax varchar(15) NULL  
);  
GO  
-- Inserting 5 rows into cust table.  
INSERT cust  
(CustomerID, Company, ContactName, Address, City, StateProvince,   
 PostalCode, CountryRegion, Telephone, Fax)  
VALUES  
 (NEWID(), 'Wartian Herkku', 'Pirkko Koskitalo', 'Torikatu 38', 'Oulu', NULL,  
 '90110', 'Finland', '981-443655', '981-443655')  
,(NEWID(), 'Wellington Importadora', 'Paula Parente', 'Rua do Mercado, 12', 'Resende', 'SP',  
 '08737-363', 'Brasil', '(14) 555-8122', '')  
,(NEWID(), 'Cactus Comidas para Ilevar', 'Patricio Simpson', 'Cerrito 333', 'Buenos Aires', NULL,   
 '1010', 'Argentina', '(1) 135-5555', '(1) 135-4892')  
,(NEWID(), 'Ernst Handel', 'Roland Mendel', 'Kirchgasse 6', 'Graz', NULL,  
 '8010', 'Austria', '7675-3425', '7675-3426')  
,(NEWID(), 'Maison Dewey', 'Catherine Dewey', 'Rue Joseph-Bens 532', 'Bruxelles', NULL,  
 'B-1180', 'Belgium', '(02) 201 24 67', '(02) 201 24 68');  
GO

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow