sql >> Databasteknik >  >> RDS >> Sqlserver

Vilka är användningsfallen för att välja CHAR framför VARCHAR i SQL?

Den allmänna regeln är att välja CHAR om alla rader kommer att ha nära till samma längd . Välj VARCHAR (eller NVARCHAR ) när längden varierar väsentligt. CHAR kan också vara lite snabbare eftersom alla rader är lika långa.

Det varierar beroende på DB-implementering, men generellt sett VARCHAR (eller NVARCHAR ) använder ytterligare en eller två byte lagring (för längd eller uppsägning) utöver den faktiska datan. Så (förutsatt att du använder en en-byte teckenuppsättning) lagra ordet "FooBar"

  • CHAR(6) =6 byte (ingen overhead)
  • VARCHAR(100) =8 byte (2 byte av overhead)
  • CHAR(10) =10 byte (4 byte avfall)

Summan av kardemumman är CHAR kan vara snabbare och mer utrymmeseffektivt för data av relativt samma längd (inom två teckens längdskillnad).

Obs :Microsoft SQL har 2 byte av overhead för en VARCHAR. Detta kan variera från DB till DB, men i allmänhet behövs det minst 1 byte med overhead för att indikera längd eller EOL på en VARCHAR.

Som påpekades av Gaven i kommentarerna:Saker och ting förändras när det kommer till teckenuppsättningar med flera byte, och är ett fall där VARCHAR blir ett mycket bättre val.

En anteckning om den deklarerade längden på VARCHAR :Eftersom den lagrar längden på det faktiska innehållet, så slösar du inte oanvänd längd. Så att lagra 6 tecken i VARCHAR(6), VARCHAR(100), eller VARCHAR(MAX) använder samma mängd lagringsutrymme. Läs mer om skillnaderna när du använder VARCHAR(MAX). Du deklarerar ett maximum storlek i VARCHAR för att begränsa hur mycket som lagras.

I kommentarerna påpekade AlwaysLearning att Microsoft Transact-SQL-dokumenten verkar säga motsatsen. Jag skulle föreslå att det är ett fel eller åtminstone är dokumenten otydliga.



  1. skillnaden mellan förklara plan och genomförandeplan

  2. SQL DELETE för nybörjare

  3. Hur man beräknar dagliga aktiva användare (DAU) i MySQL

  4. Hur söker man i flera kolumner i MySQL?