logo

MySQL VARCHAR

Varchar a MySQL és un tipus de dades utilitzat per emmagatzemar text la longitud del qual pot tenir un màxim de 65535 caràcters . Les columnes varchar de la taula són de cadena de longitud variable que pot contenir tant numèrics com caràcters o tots dos. Aquest tipus de dades només és capaç d'emmagatzemar 255 caràcters abans de la versió 5.0.3, però amb aquesta versió i posterior, pot contenir fins a 65535 caràcters. Es pot emmagatzemar a MySQL com a 1 byte o 2 bytes prefix de longitud més la mida real.

El prefix de longitud especifica la longitud en bytes d'un valor de cadena, no la mida màxima que hem establert. Si els valors no requereixen més de 255 bytes, una columna utilitza el prefix de longitud més un byte. Si els valors requereixen més de 255 bytes, una columna utilitza el prefix de longitud més dos bytes.

La longitud màxima d'un VARCHAR en MySQL està subjecte a la mida màxima de fila de 65.535 bytes, que es comparteix entre totes les columnes excepte les columnes TEXT/BLOB i el conjunt de caràcters utilitzat. Significa que la columna total no hauria de ser superior a 65535 bytes.

Entenem-ho amb l'ajuda d'un exemple.

Crearem dues taules i les anomenarem Test1 i Test2. Les dues taules contenen dues columnes anomenades T1 i T2. Executeu la instrucció següent per crear una taula ' Prova 1 ':

 CREATE TABLE Test1 ( T1 VARCHAR(32765) NOT NULL, T2 VARCHAR(32766) NOT NULL ) CHARACTER SET = 'latin1' COLLATE LATIN1_DANISH_CI; 

La declaració anterior va crear una taula correctament perquè la longitud de la columna T1 = 32765 més 2 bytes i T2 = 32766 més 2 bytes iguals a 65535 (32765+2+32766+2). Per tant, la longitud de la columna compleix la mida màxima de fila de varchar, que és 65535.

MySQL VARCHAR

Ara, veurem què passa si la mida de la columna supera la mida màxima de varchar 65535. Executeu la instrucció següent on tenim augmenta la mida de la columna T1 per crear una taula Prova 2 :

 CREATE TABLE Test2 ( T1 VARCHAR(32770) NOT NULL, T2 VARCHAR(32766) NOT NULL ) CHARACTER SET = 'latin1' COLLATE LATIN1_DANISH_CI; 

Després d'executar la instrucció anterior, MySQL produeix l'error. Significa que la mida màxima de la fila no pot superar els 65.535 bytes. En qualsevol cas, si augmenta, la instrucció fallarà i MySQL generarà un error.

MySQL VARCHAR

En un altre cas, suposem que hem creat una taula anomenada Prova 3 utilitzant la declaració següent:

clau d'inserció del portàtil
 CREATE TABLE Test3 ( Id INT PRIMARY KEY AUTO_INCREMENT, Name VARCHAR(5) NOT NULL ); 

A continuació, inseriu valors a la taula utilitzant la instrucció següent:

 INSERT INTO Test3(Name) VALUES ('Stephen'); 

Ara, executeu la declaració anterior. MySQL dóna el missatge d'error: Les dades són massa llargues per a la columna 'Nom' de la fila 1 . La sortida ho explica més clarament.

MySQL VARCHAR

MySQL VARCHAR i espais

MySQL no ocupa espai per als valors varchar quan s'emmagatzemen. MySQL també va conservar els espais al final quan emmagatzemaven o recuperaven valors varchar. Ho podem entendre a través del següent exemple on an inserir declaració afegeix valors al Nom columna de la taula Prova 3 :

 INSERT INTO Test3(Name) VALUES ('John '); 

A continuació, executeu la instrucció SELECT per recuperar els valors.

 SELECT Id, Name, length(Name) FROM Test3; 

Donarà la següent sortida on MySQL va incloure l'espai final en el recompte de la longitud perquè no augmenta la longitud de la columna.

MySQL VARCHAR

Tanmateix, quan intentem inserir un valor varchar amb espais al final que superin la longitud de la columna, el MySQL truncar els espais posteriors. A més, MySQL emet a advertència . L'exemple següent ho explica amb més claredat:

 INSERT INTO Test3(Name) VALUES ('Peter '); 

La declaració anterior insereix un valor la longitud del qual és sis a la columna del nom. El valor encara s'insereix a la columna, però MySQL trunca l'espai final abans d'afegir el valor. Podem verificar mitjançant la consulta següent on podem veure la instrucció d'inserció afegida amb èxit però amb un avís que dóna: Dades truncades per a la columna 'nom' a la fila 1 :

MySQL VARCHAR

Diferència entre el tipus de dades Char i Varchar

Els tipus de dades char i varchar són els següents Caràcter ASCII . Són gairebé els mateixos, però es diferencien per emmagatzemar i recuperar les dades de la base de dades. La taula següent resumeix les diferències essencials entre el tipus de dades char i varchar:

CHAR VARCHAR
Té caràcter. Significa caràcter variable.
Emmagatzema els valors en longitud fixa que declarem mentre creem una taula. Emmagatzema els valors en una cadena de longitud variable amb un prefix de longitud d'un o dos bytes.
Aquest tipus de dades es pot omplir amb un espai al final per mantenir la longitud especificada. Aquest tipus de dades no es pot emplenar amb cap caràcter, inclòs l'espai, quan s'emmagatzemen.
No pot contenir més de 255 caràcters. Pot contenir fins a 65535 caràcters.
Admet l'assignació de memòria estàtica. Admet l'assignació de memòria dinàmica.