Det är ingen skillnad, under huven är allt varlena
(array med variabel längd).
Kolla in den här artikeln från Depesz:http://www.depesz.com/index.php/2010/03/02/charx-vs-varcharx-vs-varchar-vs-text/
Ett par höjdpunkter:
För att sammanfatta det hela:
- char(n) – tar för mycket utrymme när man hanterar värden kortare än
n
(fyller dem tilln
), och kan leda till subtila fel på grund av att man lägger till efterföljande utrymmen, plus att det är problematiskt att ändra gränsen- varchar(n) – det är problematiskt att ändra gränsen i levande miljö (kräver exklusivt lås vid ändring av tabell)
- varchar – precis som text
- text – för mig en vinnare – över (n) datatyper eftersom det saknar sina problem, och över varchar – eftersom det har ett distinkt namn
Artikeln utför detaljerade tester för att visa att prestandan för infogning och val för alla fyra datatyperna är likartade. Den tar också en detaljerad titt på alternativa sätt att begränsa längden vid behov. Funktionsbaserade begränsningar eller domäner ger fördelen av omedelbar ökning av längdbegränsningen, och på grundval av att det är sällsynt att minska en stränglängdsbegränsning drar depesz slutsatsen att en av dem vanligtvis är det bästa valet för en längdbegränsning.