문제

SQL에서 Varchar 열을 포함하고 싶습니다. N'guid' 동안 guid .NET (.NET)에 의해 생성 된 안내서입니다.guid.newguid) - 클래스 시스템.

의 길이는 무엇입니까 varchar 안내서에서 기대해야합니까? 정적 길이입니까?

내가 사용해야할까요 nvarchar (Guid가 유니 코드 문자를 사용하지 않습니까?)?

varchar(Guid.Length)

추신. SQL Row Guid 데이터 유형을 사용하고 싶지 않습니다. 나는 단지 무엇이 무엇인지 묻고 있습니다 Guid.MaxLength.

도움이 되었습니까?

해결책

GUID를 형식화하는 방법에 따라 다릅니다.

  • Guid.NewGuid().ToString() => 36 문자 (하이픈)
    출력 : 12345678-1234-1234-1234-123456789abc

  • Guid.NewGuid().ToString("D") => 36 문자 (하이픈, 동일 ToString())
    출력 : 12345678-1234-1234-1234-123456789abc

  • Guid.NewGuid().ToString("N") => 32 문자 (숫자 만)
    출력 : 12345678123412341234123456789abc

  • Guid.NewGuid().ToString("B") => 38 캐릭터 (브레이스)
    출력 : {12345678-1234-1234-1234-123456789abc}

  • Guid.NewGuid().ToString("P") => 38 캐릭터 (괄호)
    출력 : (12345678-1234-1234-1234-123456789abc)

  • Guid.NewGuid().ToString("X") => 68 캐릭터 (16 진수)
    출력 : {0x12345678,0x1234,0x1234,{0x12,0x34,0x12,0x34,0x56,0x78,0x9a,0xbc}}

다른 팁

36, 그리고 안내서는 0-9A-F (16 진수!) 만 사용합니다.

12345678-1234-1234-1234-123456789012

그것은 모든지도에서 36 자입니다. 길이는 일정합니다. 안내의 복잡성에 대해 조금 더 읽을 수 있습니다. 여기.

버팀대를 저장하려면 길이가 두 개 더 필요합니다.

참고 : 36은 대시가 사이에있는 문자열 길이입니다. 그들은 실제로 16 바이트 숫자입니다.

그만큼 옳은 여기서해야 할 일은 그것을 보관하는 것입니다 uniqueidentifier - 데이터베이스에서 완전히 색인이 가능합니다. 다음 최고 옵션은 다음과 같습니다 binary(16) 열 : 표준 안내서의 길이는 정확히 16 바이트입니다.

문자열로 저장 해야하는 경우 길이는 실제로 인코딩하는 방식으로 내려집니다. 하이픈이없는 Hex (일명 Base-16 인코딩)로서 32 자 (바이트 당 2 개의 16 진수)가됩니다. char(32).

그러나 당신은 할 수도 있습니다 원하다 하이픈을 보관합니다. 공간이 부족하지만 데이터베이스가 Blobs / Guids를 기본적으로 지원하지 않으면 사용할 수 있습니다. 베이스 64 인코딩 및 제거 == 패딩 접미사; 그것은 당신에게 22자를 제공합니다 char(22). 유니 코드를 사용할 필요가 없으며 가변 길이가 필요하지 않습니다. nvarchar(max) 예를 들어 나쁜 선택이 될 것입니다.

나는 안내가 16 바이트 길이 (또는 ASCII Hex 동등한 경우 32 바이트)로 제한된다고 생각합니다.

안내서는 128bits, OR입니다

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)

그렇습니다. 20자는 길이가 4.25 비트 이상을 낭비하고 있으므로 95보다 작은베이스를 사용하여 효율적 일 수 있습니다. 베이스 85는 여전히 20 숯에 맞는 가장 작은 것입니다.

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

:-)

22 바이트, 다음과 같이하는 경우 :

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

이진 문자열은 문자열이 저장 텍스트 인 동안 원시 바이트 데이터를 저장합니다. 다음과 같은 육각형 값을 저장할 때 이진 데이터를 사용하십시오 SID, GUID 등등. 고유 한 식별기 데이터 유형에는 전 세계적으로 고유 한 식별자 또는 Guid가 포함되어 있습니다. 이 값은 NewID () 함수를 사용하여 모든 객체에 고유 한 값을 반환하여 도출됩니다. 이진 값으로 저장되지만 문자열로 표시됩니다.

여기 예입니다.

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

다음에 적용됩니다 : SQL Server 다음 예제는 고유 식별자 데이터 유형으로 Cust Table을 생성하고 NewID를 사용하여 기본값으로 테이블을 채 웁니다. NewID ()의 기본값을 할당 할 때 각각의 신규 및 기존 행에는 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
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top