Atunci când vom crea un tabel in mysql cu un VARCHAR
coloană, trebuie să setați durata pentru acesta. Dar pentru "TEXT" tip nu ne't trebuie să furnizeze lungime.
Care sunt diferențele între VARCHAR
și "TEXT"?
"TEXT"
VARCHAR(M)
c
bytes (pentru " M "≤ 255) sau 2 + " c "(pentru 256 ≤ M ≤ 65535) bytes de spațiu pe disc în cazul în care " c " este lungimea stocate string"TEXT" are o fix mărimea maximă a 2¹⁶-1 = 65535 caractere.
VARCHARa un **variabile** dimensiune max " M " *până la*
M = 2¹⁶-1. Deci, nu puteți alege dimensiunea de "TEXT", dar puteți, de un
VARCHAR`.
Pe de altă diferență este, că nu poți pune un index (cu excepția pentru o fulltext index) pe un "TEXT" column.
Deci, dacă doriți să aveți un index pe coloana, trebuie să utilizați VARCHAR
. Dar observați că durata de un indice, de asemenea, este limitat, așa că dacă VARCHAR
coloana este prea lung, trebuie să utilizați doar primele caractere ale VARCHAR
coloana în indice (a se Vedea documentația pentru CREA INDEX
).
Dar tu, de asemenea, doriți să utilizați VARCHAR
, dacă știți că lungimea maximă a posibilului șir de intrare este numai "M", de exemplu un număr de telefon sau un nume sau ceva de genul asta. Apoi, puteți utiliza VARCHAR(30) "în loc de" TINYTEXT
sau "TEXT" și dacă cineva încearcă să salveze textul de la toate cele trei "Lord of the Ring" cărți în numărul dvs. de telefon coloana stoca doar primele 30 de caractere :)
Edit: Dacă textul pe care doriți să stocați în baza de date este mai mult decât 65535 caractere, trebuie să alegeți MEDIUMTEXT " sau " LONGTEXT, dar fii atent:
MEDIUMTEXT magazine, siruri de caractere până la 16 MB, LONGTEXT
până la 4 GB. Dacă utilizați LONGTEXT
și pentru a obține date prin intermediul PHP (cel puțin dacă utilizați mysqli fără store_result
), poate obține o eroare de alocare de memorie, deoarece PHP încearcă să aloce 4 GB de memorie pentru a fi sigur că întreg șir poate fi tamponat. Acest lucru poate, de asemenea, se întâmplă în alte limbi decât PHP.
Cu toate acestea, ar trebui să mereu verificați de intrare (E prea mult? Nu conține ciudat codul?) înainte de a stoca în baza de date.
Observație: Pentru ambele tipuri, spațiul necesar pe disc depinde numai de lungimea stocate șir și nu pe lungime maximă.
E. g. dacă utilizați caractere latin1 și stoca textul "de Testare" în VARCHAR(30)
, VARCHAR(100) " și " TINYTEXT
, este nevoie întotdeauna de 5 octeți (1 octet pentru a stoca lungimea șirului și 1 octet pentru fiecare caracter). Dacă se păstrează același text într-un VARCHAR(2000)
sau un TEXT
coloana, ar necesita, de asemenea, același spațiu, dar, în acest caz, ar fi de 6 octeți (2 octeți pentru a stoca șirul de lungime și 1 octet pentru fiecare caracter).
Pentru mai multe informații au o privire la documentația.
În cele din urmă, vreau să adăugați un anunț, că amândoi, TEXT
și VARCHAR
sunt de lungime variabilă, tipuri de date, și așa au cele mai multe sanse de a minimiza spațiul de care aveți nevoie pentru a stoca datele. Dar acest lucru vine cu un trade-off pentru performanță. Dacă ai nevoie de o performanță mai bună, trebuie să utilizați o lungime fixă tip ca CHAR
. Puteți citi mai multe despre acest aici.