Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Какви са случаите на използване за избор на CHAR пред VARCHAR в SQL?

Общото правило е да изберете CHAR ако всички редове ще имат близка до еднаква дължина . Изберете VARCHAR (или NVARCHAR ), когато дължината варира значително. CHAR може също да е малко по-бърз, защото всички редове са с еднаква дължина.

Тя варира в зависимост от имплементацията на DB, но обикновено VARCHAR (или NVARCHAR ) използва още един или два байта за съхранение (за дължина или прекратяване) в допълнение към действителните данни. Така че (ако приемем, че използвате еднобайтов набор от знаци), съхраняване на думата "FooBar"

  • CHAR(6) =6 байта (без допълнителни разходи)
  • VARCHAR(100) =8 байта (2 байта режийни)
  • CHAR(10) =10 байта (4 байта отпадъци)

Долният ред е CHAR може бъдете по-бързи и още икономични на пространството за данни с относително еднаква дължина (в рамките на разлика в дължината от два знака).

Забележка :Microsoft SQL има 2 байта допълнителни разходи за VARCHAR. Това може да варира от DB до DB, но обикновено има най-малко 1 байт служебна информация, необходима за указване на дължина или EOL на VARCHAR.

Както беше посочено от Гавън в коментарите:Нещата се променят, когато става въпрос за набори от многобайтови знаци и това е случай, когато VARCHAR става много по-добър избор.

Бележка за декларираната дължина на VARCHAR :Тъй като съхранява дължината на действителното съдържание, вие не губите неизползвана дължина. Така че съхраняване на 6 знака в VARCHAR(6), VARCHAR(100), или VARCHAR(MAX) използва същото количество място за съхранение. Прочетете повече за разликите при използване на VARCHAR(MAX). Декларирате максимум размер във VARCHAR, за да ограничите колко се съхранява.

В коментарите AlwaysLearning посочи, че документите на Microsoft Transact-SQL изглежда казват обратното. Предполагам, че това е грешка или поне документите са неясни.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Използване на условен оператор UPDATE в SQL

  2. Върнете основния тип данни от стойност на SQL_Variant в SQL Server

  3. Функция IndexOf в T-SQL

  4. Как да получа списък с всички таблици в база данни с помощта на TSQL?

  5. Изберете топ 10 записа за всяка категория