Je veux créer une colonne varchar en SQL qui devrait contenir N'guid'
while guid
est un GUID généré par .NET ( Guid.NewGuid ) - classe System.Guid.
Quelle est la durée de l' varchar
attente d'un GUID? Est-ce une longueur statique?
Dois-je utiliser nvarchar
(le GUID utilisera-t-il jamais des caractères Unicode)?
varchar(Guid.Length)
PS. Je ne veux pas utiliser de type de données SQL row guid. Je demande juste ce qui est Guid.MaxLength
.
Guid.NewGuid
n'a pas de "longueur de chaîne" implicite; Tout dépend du format utilisé dans la ToString (le no-argumentToString
utilise le formatage "D"). Je préfère "B" car il est plus facile de "voir que c'est un GUID", mais c'est juste une familiarité et une convention.Réponses:
Cela dépend de la façon dont vous formatez le Guid:
Guid.NewGuid().ToString()
=> 36 caractères (avec trait d'union):
12345678-1234-1234-1234-123456789abc
Guid.NewGuid().ToString("D")
=> 36 caractères (avec trait d'union, commeToString()
):
12345678-1234-1234-1234-123456789abc
Guid.NewGuid().ToString("N")
=> 32 caractères (chiffres uniquement)sorties:
12345678123412341234123456789abc
Guid.NewGuid().ToString("B")
=> 38 caractères (accolades)sorties:
{12345678-1234-1234-1234-123456789abc}
Guid.NewGuid().ToString("P")
=> 38 caractères (parenthèses)sorties:
(12345678-1234-1234-1234-123456789abc)
Guid.NewGuid().ToString("X")
=> 68 caractères (hexadécimaux):
{0x12345678,0x1234,0x1234,{0x12,0x34,0x12,0x34,0x56,0x78,0x9a,0xbc}}
la source
byte[16]
.36 et le GUID n'utilisera que 0-9A-F (hexidécimal!).
12345678-1234-1234-1234-123456789012
Cela fait 36 caractères dans n'importe quel GUID - ils sont de longueur constante. Vous pouvez lire un peu plus sur les subtilités des GUID ici .
Vous aurez besoin de deux autres longueurs si vous souhaitez stocker les accolades.
Remarque: 36 est la longueur de la chaîne avec les tirets entre les deux. Ce sont en fait des nombres de 16 octets.
la source
La bonne chose à faire ici est de le stocker sous
uniqueidentifier
- c'est alors entièrement indexable, etc. dans la base de données. La prochaine meilleure option serait unebinary(16)
colonne: les GUID standard font exactement 16 octets.Si vous devez le stocker sous forme de chaîne, la longueur dépend vraiment de la façon dont vous choisissez de l'encoder. En hexadécimal (codage AKA base-16) sans tirets, ce serait 32 caractères (deux chiffres hexadécimaux par octet), donc
char(32)
.Cependant, vous souhaiterez peut - être stocker les tirets. Si vous manquez d'espace, mais que votre base de données ne prend pas en charge les blobs / guids nativement, vous pouvez utiliser le codage Base64 et supprimer le
==
suffixe de remplissage; cela vous donne 22 caractères, doncchar(22)
. Il n'est pas nécessaire d'utiliser Unicode, ni de longueur variable - cenvarchar(max)
serait donc un mauvais choix, par exemple.la source
uniqueidentifer
entièrement indexable maisbinary(16)
ne l'est pas?Je crois que les GUID sont limités à des longueurs de 16 octets (ou 32 octets pour un équivalent hexadécimal ASCII).
la source
Les GUID sont 128 bits, ou
Alors oui, min 20 caractères, ce qui gaspille en fait plus de 4,25 bits, vous pouvez donc être tout aussi efficace en utilisant des bases plus petites que 95; la base 85 étant la plus petite possible qui tient toujours dans 20 caractères:
:-)
la source
22 octets, si vous le faites comme ceci:
la source
Les chaînes binaires stockent des données d'octets bruts, tandis que les chaînes de caractères stockent du texte. Utilisez des données binaires lors du stockage de valeurs hexi-décimales telles que
SID
,GUID
etc. Le type de données uniqueidentifier contient un identificateur global unique, ou GUID. Cette valeur est dérivée à l'aide de la fonction NEWID () pour renvoyer une valeur unique à tous les objets. Il est stocké sous forme de valeur binaire mais il est affiché sous forme de chaîne de caractères.Voici un exemple.
S'applique à: SQL Server L'exemple suivant crée la table cust avec un type de données uniqueidentifier et utilise NEWID pour remplir la table avec une valeur par défaut. En affectant la valeur par défaut de NEWID (), chaque ligne nouvelle et existante a une valeur unique pour la colonne CustomerID.
la source