Mysql
 sql >> Database >  >> RDS >> Mysql

MYSQL - Come aggirare il limite della dimensione della riga di 66 KByte

La risposta accettata è sbagliata (o almeno abbastanza supponente):personalmente non voglio che i dati vengano archiviati al di fuori del mio database, poiché crea complicazioni in termini di procedure di backup e query transazionali.

Come altri hanno sottolineato, il manuale afferma ripetutamente che le colonne BLOB e TEXT non contano per la dimensione totale della riga, ma sfortunatamente, con le impostazioni di configurazione predefinite, non è vero e si finisce per ricevere questo messaggio di errore. (Il messaggio di errore non ha alcun senso, perché ti dice di usare TEXT invece di VARCHAR per risolvere il problema, cosa che già stai facendo.)

Il motivo di questa limitazione è il meccanismo di archiviazione predefinito, Antelope , che memorizza i primi 768 byte di colonne a lunghezza variabile nella riga - e una possibile soluzione consiste nell'utilizzare INNODB e passare il meccanismo di archiviazione all'alternativa Barracuda meccanismo di archiviazione:

SET GLOBAL innodb_file_format=Barracuda;

Ciò non avrà alcun effetto immediato, poiché questa impostazione è un'impostazione predefinita per i nuovi file di database, quindi dovrai eliminare e ricreare l'intero database.

In alternativa, passa a Barracuda (come sopra) e poi (in aggiunta) passa alla strategia file per tabella:

SET GLOBAL innodb_file_per_table=ON;

Anche in questo caso, ciò non avrà alcun effetto immediato, poiché entrambe le impostazioni sono predefinite per le nuove tabelle, quindi, ancora una volta, dovrai eliminare e ricreare la tabella.

Se guardi nella cartella dei dati MySQL dopo aver fatto ciò, puoi confermare che sono stati creati file separati, ad es. per un database chiamato "data" e una tabella chiamata "test", dovresti vedere un file chiamato "data/test/bigtable.ibd".

Se non ti piace modificare le impostazioni globali in MySQL, prova SET SESSION invece di SET GLOBAL , per esempio. immediatamente prima di eseguire il tuo CREATE TABLE dichiarazioni.