Durante il design di un database relazionale, specialmente in ambito web, capita di dover gestire dati formati da porzioni di testo piuttosto corpose. Utilizzando MySQL ci vengono in soccorso quattro tipi, TINYTEXT, TEXT, MEDIUMTEXT e LONGTEXT. A differenza degli altri tipi non è possibile specificare una lunghezza per l’input atteso, ragion per cui, se si ignora quale sia il limite reale si può incorrere in troncamenti inattesi e soprattutto SILENTI.
La lunghezza di questi tipi è definita nella sezione 6.2 del manuale online di MySQL, ed in particolare si parla di:
- TINYTEXT 256 bytes
- TEXT 65,535 bytes ~ 64kb
- MEDIUMTEXT 16,777,215 bytes ~ 16MB
- LONGTEXT 4,294,967,295 bytes ~ 4GB
Nella maggioranza dei casi quindi utilizzare TEXT è la scelta più adeguata ma è sempre sapere qual è il limite per non incorrere in troncamenti indesiderati e difficilmente individuabili. Il risultato sarebbe quindi infatti di un blocco di testo mancante in una determinata colonna, in corrispondenza di una INSERT che comunque ha avuto successo.
Personalmente a ELbuild controllo sempre lato software, per evitare spiacevoli sorprese, anche se l’adozione sempre più spinta di sistemi come JPA consente allo sviluppatore di delegare molti di questi dettagli implementativi al framework di persistenza, semplicemente scrivendo qualche annotazione in più.