2009-10-20 29 views
16

Se ho una colonna della tabella con il campo di tipo VARCHAR(15) e se provo ad inserire i dati di lunghezza 16, MySQL dà un errore che indicalimite di dimensione MySQL VARCHAR

Data too long for column 'testname' at row 1 

Qualcuno sa perché i campi VARCHAR in MySQL prendere una lunghezza fissa? Inoltre quanti byte fa un campo VARCHAR per record in base alla dimensione data?

+4

@ Camilo - Fa finta che tu ce l'abbia fatta! – Ben

risposta

13

Se si imposta una colonna su varchar(15), il numero massimo di byte consentito è 15. Quindi non è possibile passarlo più di 15 caratteri senza modificare la colonna per supportare più di 15. Se si memorizza una stringa di 4 caratteri, è necessario solo usa circa 4 byte di un possibile 15, mentre se hai usato char(15), avrebbe riempito gli altri 11 con byte vuoti.

http://dev.mysql.com/doc/refman/5.0/en/char.html

(I miei calcoli byte era probabilmente fuori dal momento che è sempre -1/+ 1 o qualcosa di simile).

+0

Grazie. Beh, nel mio caso sono davvero incerto su quale sarà la lunghezza dei dati in arrivo. Potrebbe essere lunga o anche piccola. per essere più precisi: Se ho specificato la colonna come Varchar (100), i dati possono essere di 100 caratteri o possono essere di 50 caratteri. Giusto per chiarire la mia comprensione. Vuoi dire che agirà solo come tipo di dati CHAR. Voglio dire ci vorranno 100 byte per ogni record o solo 50 byte inseriti.Anche in altri RDBMS Se non si specifica il limite varchar o anche dopo il limite di specifica, mi consente di inserire più caratteri di quello. È possibile in MYSQL. –

+0

Se lo si imposta su 'varchar (100)' e i dati della propria riga sono di 50 caratteri, ne userà solo la metà, ma * non * agirà come 'char' che riempie i restanti byte. –

+0

Grazie ma non è possibile inserire più di 100 byte nella colonna varchar (100). Ci scusiamo per aver ripetuto la stessa domanda ancora e ancora. Ma voglio essere molto sicuro prima di impostare qualsiasi dimensione alla colonna. Grazie ancora. –

1

Se guardate qui si dovrebbe dirvi tutto di varchar vuoi sapere: http://dev.mysql.com/doc/refman/5.0/en/char.html

In sostanza, a seconda della lunghezza si scelsero userà 1 o due byte per monitorare la lunghezza della stringa corrente quella colonna, quindi memorizzerà il numero di byte per i dati inseriti, più uno o due byte.

Quindi, se si inserisce 'abc', saranno 4 o 5 byte utilizzati per quella colonna in quella riga.

Se si utilizza char(15), anche 'abc' richiederebbe 15 byte, poiché i dati sono riempiti a destra per utilizzare fino a 15 byte.

+0

Ciao James, Cosa intendi per dati con riempimento a destra? Significa anche che, anche se inserissi 10 caratteri nella colonna varchar (15), occorreranno 15 byte interi per 10 caratteri come il Char (15). –

+0

No, il riempimento corretto è per char, non varchar. –

13

Dal MySQL 5.0 Manual:

valori nelle colonne VARCHAR sono stringhe di lunghezza variabile. La lunghezza può essere specificata come valore da 0 a 255 prima di MySQL 5.0.3 e da 0 a 65.535 in 5.0.3 e versioni successive. La lunghezza massima effettiva di un VARCHAR in MySQL 5.0.3 e versioni successive è soggetta alla dimensione massima della riga (65.535 byte, che è condivisa tra tutte le colonne) e al set di caratteri utilizzato.

io uso solo VARCHAR quando sono certo che i dati della colonna deve contenere potranno mai superare una certa lunghezza, e anche allora io sono cauto. Se sto memorizzando una stringa di testo, tendo a usare uno dei tipi di TESTO.

Controllare il MySQL Storage Requirements per ulteriori informazioni su come vengono utilizzati i byte.

3

Piccola nota extra locale. Il numero di byte utilizzati dipenderà dallo schema di codifica in uso. 1 byte per carattere nella codifica latin1, ma fino a 3 in UTF8. Vedi il collegamento nella risposta di mlambie per i dettagli.

+0

Grazie. sì. Userò UTF-8, quindi richiederà doppio byte. –