Mai mult
PostgreSQL: Diferența dintre text și varchar (caractere diferite)
Ce's diferența între "text" tip de date și caracterul variabil(
varchar`) tipuri de date?
Potrivit documentatiei]1
în Cazul în care personajul diferite este folosit fără specificator de lungime, de tip acceptă șiruri de orice dimensiune. Acesta din urmă este un PostgreSQL extensie.
și
În plus, PostgreSQL oferă de tip text, care stochează siruri de caractere de orice lungime. Deși tipul de text nu este în SQL standard, mai multe alte sisteme de management de baze de date SQL la fel de bine.
Deci, ceea ce's diferența?
551
8
Nu există nici o diferență, sub capota se's toate
varlena
(lungime variabilă array).Verificați acest articol din Depesz: http://www.depesz.com/index.php/2010/03/02/charx-vs-varcharx-vs-varchar-vs-text/
Câteva repere:
Articolul face teste detaliate pentru a arăta că performanța de inserții și selectează pentru toate cele 4 tipuri de date sunt similare. Ea are, de asemenea, o privire detaliată la modalități alternative de pe constrângere lungimea atunci când este necesar. Funcție de constrângerile sau domenii oferă avantajul de a crește instant de lungimea de constrângere, și pe baza faptului că descrescătoare a unui șir de lungime constrângere este rară, depesz concluzionează că una dintre ele este de obicei cea mai bună alegere pentru o limită de lungime.
Ca "Tipuri de Caractere" în documentația de puncte, pentru varchar(n)
,
char(n), și "text" sunt toate stocate în același mod. Singura diferență este extra cicluri sunt necesare pentru a verifica lungimea, dacă unul este dat, și spațiu suplimentar și timpul necesar dacă umplutură este necesar pentruchar(n)
.Cu toate acestea, atunci când aveți nevoie doar pentru a stoca un singur caracter, există o ușoară avantaj de performanță pentru a utiliza speciale de tip `"char" (se ține dublu-citate — au're o parte din nume de tip). Veți obține acces mai rapid la câmp, și nu există nici o deasupra capului pentru a stoca lungime.
Am făcut doar o masă de 1.000.000 aleatorie"char"
ales din litere mici alfabet. O interogare pentru a obține o frecvență de distribuție (
select count(*), teren ... grup de teren`) durează aproximativ 650 de milisecunde, vs aproximativ 760 pe aceleași date, folosind un "text" de teren.ACTUALIZAREA REFERINȚĂ PENTRU 2016 (pg9.5+)
Și folosind "pur SQL" indicii de referință (fără nici un script extern)
folosi orice string_generator cu UTF8
principalele criterii de referință:
2.1. INTRODUCE
2.2. SELECTAȚI comparare și numărare
Pregătiți de testare specifice (exemple)
Pe PostgreSQL manual
Eu folosesc, de obicei text
Referințe: http://www.postgresql.org/docs/current/static/datatype-character.html
În opinia mea,
varchar(n)
a's avantaje proprii. Da, toate folosesc același tip de fond al sistemului și toate astea. Dar, trebuie subliniat faptul că indicii în PostgreSQL are o limită de dimensiune de 2712 bytes pe rând.TL;DR: Dacă utilizați "text" tip fără o constrângere și au indici de pe aceste coloane, este foarte posibil ca te-a lovit această limită pentru unele dintre coloane și de a lua de eroare atunci când încercați să introduceți date dar cu ajutorul `varchar(n), se poate preveni.
Mai multe detalii: problema aici este că PostgreSQL nu't da orice excepții atunci când crearea de indici pentru "text" tip sau
varchar(n), unde " n " este mai mare decât 2712. Cu toate acestea, se va da eroare atunci când o înregistrare comprimat cu dimensiunea mai mare decât 2712 se încearcă să fie introdus. Aceasta înseamnă că puteți introduce 100.000 de caracter din șir care este compus din repetitive caractere ușor, pentru că va fi comprimat cu mult sub 2712 dar este posibil să nu fi capabil de a introduce un șir de caractere cu 4000 de caractere, deoarece dimensiunea comprimat este mai mare decât 2712 bytes. Folosind
varchar(n), unde " n " este nu prea mult mai mare decât 2712, ai're în siguranță de la aceste erori.text și varchar au diferite conversii de tip implicite. Cel mai mare impact pe care am'am observat că se ocupă de spații. De exemplu ...
se întoarce
true, false, true "și nu" adevărat, adevărat, adevărat
ca s-ar putea aștepta.Oarecum OT: Daca're folosind Șine, standard de formatare a paginilor web pot fi diferite. Pentru formulare de introducere a datelor "text" cutii sunt derulabil, dar caracterul variabil
(Șine
string`) casetele sunt pe o singură linie. Spectacol de vedere sunt la fel de mult ca este necesar.character varying(n)
,varchar(n)
- (Ambele la fel). valoarea va fi trunchiat la n caractere, fără a ridica o eroare.personaj(n)
,char(n)
- (Ambele la fel). de lungime fixă și va pad cu gloanțe oarbe până la sfârșitul lungime."text" - lungime Nelimitată.
Exemplu:
Am primit rezultatele: