Abbiamo alcuni ingegneri che appiattiscono una struttura db normalizzata in una tabella temporanea allo scopo di generare un report. Le colonne sono specificate come TEXT NOT NULL
(so "perché lo stanno facendo?"; Supponiamo che ci stiamo occupando di questo).
Utilizziamo MySQL 5.1.48 Community RHEL5 con plug-in InnoDB 1.0.9 su Linux.
Quando si utilizza MyISAM non abbiamo mai riscontrato limiti di dimensione della tabella per colonne massime o lunghezza massima della riga (durante l'indagine abbiamo raggiunto il limite massimo di colonne a 2598 (il 2599 causa errore 1117). Con InnoDB stiamo raggiungendo limiti. Questi limiti si manifestano durante la creazione del tabella (nessun inserimento di dati) come:
ERRORE 1118 (42000) alla riga 1: dimensione della riga troppo grande. La dimensione massima della riga per il tipo di tabella utilizzata, senza contare i BLOB, è 8126. È necessario modificare alcune colonne in TESTO o BLOB
Cerco risposte a quanto segue:
Qual è la formula dettagliata per determinare le dimensioni delle righe quando si usano lotti di colonne v / v / b / t? Ho provato alcuni formati diversi usando le
varchar(N)
colonne (dove N è compreso tra 1 e 512), il set di caratteri UTF8 (* 3) e tutte le colonne che la tabella prenderà fino al fallimento. Nessuna delle combinazioni che ho provato fornisce valori che corrispondono ai risultati dei test effettivi.Quali altri "costi generali" devo considerare nel calcolo delle dimensioni della riga?
Perché il messaggio di errore cambia da 8126 a 65535 quando passo dalla creazione di tabelle con colonne varchar (109) a colonne varchar (110)?