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

Novità per non più varchar(255)

A quale "regola VARCHAR(255)" ti riferisci?

Ogni fornitore di database è libero di implementare VARCHAR come preferisce. Le regole (e le linee guida) per VARCHAR non saranno necessariamente le stesse per tutti i database.

Per quanto riguarda lo standard SQL, non l'ho davvero esaminato. Potrebbe essere piuttosto lento, quindi tutte le implementazioni VARCHAR risultano conformi allo standard. Se lo standard SQL per VARCHAR è davvero rigoroso, i fornitori di DBMS potrebbero estendere lo standard o semplicemente potrebbero non essere conformi. Non credo che lo standard attuale sia molto importante. Ciò che conta sono le regole effettive applicate dal DBMS.

Per quanto riguarda le linee guida generali, specificare una lunghezza VARCHAR sufficientemente lunga da supportare i requisiti di sistema. Se il requisito del sistema è di non consentire più di 200 caratteri, allora specificherei la lunghezza come VARCHAR(200) .

Come altra linea guida generale, non definire lunghezze VARCHAR maggiori del necessario. Le colonne VARCHAR dichiarate più lunghe del necessario possono avere un impatto sulle risorse e sulle prestazioni.

Il limite Oracle per la lunghezza VARCHAR è di 4000 caratteri. (Nelle versioni precedenti di Oracle, il massimo era 2000. Se hai bisogno di più di 4000 caratteri, puoi usare CLOB tipo di dati.

Limite di SQL Server a VARCHAR(8000) , a meno che non specifichi VARCHAR(MAX) che consente una dimensione massima (in byte) di 2^32-1.

MySQL ha un limite di 65.535 per il limite massimo di lunghezza delle righe. In modo che limiti effettivamente le dimensioni di VARCHAR a VARCHAR(21844), se si utilizza un set di caratteri multibyte come utf8. Con un set di caratteri a byte singolo (come latin1), il massimo sarebbe VARCHAR(65532). Se hai bisogno di più caratteri o se raggiungi il limite della lunghezza massima della riga, puoi utilizzare il tipo di dati TEXT invece di VARCHAR.

La maggior parte delle implementazioni DBMS VARCHAR memorizza un campo "lunghezza" per una colonna VARCHAR, insieme al valore. la lunghezza viene memorizzata come numero intero.

In alcuni DBMS, se la lunghezza massima (in byte) di una colonna VARCHAR non supera i 255 byte, il campo della lunghezza può essere implementato come un intero byte singolo. Se la colonna consente più di 255 byte, il campo della lunghezza deve essere maggiore di un singolo byte.

Con i formati di riga dinamici, in termini di archiviazione riga, memorizzazione di 10 caratteri in una colonna, non importa se la colonna è definita come VARCHAR(30) o VARCHAR(1000). Con formati di riga fissi, lo spazio per la lunghezza massima della colonna sarà riservato. Il formato per l'archiviazione delle righe dipenderà dal DBMS e in alcuni casi (MySQL) dal motore di archiviazione e dal formato riga specificato.

Sì, è il 2016. E abbiamo fatto molta strada dall'introduzione del primo sistema di database relazionali commerciali.

Il database è solo una parte del sistema. Potrebbero esserci dei limiti nell'applicazione o in altri componenti software. (Se l'applicazione è scritta in C e l'applicazione sta definendo una struttura con un array di byte per il campo, il limite alla dimensione sarà importante. L'aumento della dimensione consentita nel database non risolverà automaticamente l'applicazione .

Potrebbero esserci anche limiti/restrizioni di lunghezza nel codice Javascript o negli elementi HTML di una pagina web. Oppure possono esserci limitazioni di altri componenti software. Ad esempio, alcuni dei vecchi driver ODBC di SQL Server hanno un limite di 255 caratteri (byte?) per entrambe le colonne CHAR e VARCHAR.

Quindi la lunghezza di un VARCHAR nel database è solo una parte della storia.

Detto questo, non mi è ancora chiaro cosa intendi quando me lo chiedi

Possiamo infrangere la regola VARCHAR(255)?

Mi chiedo a quale "regola" ti riferisci. Nella maggior parte dei database di cui sono a conoscenza, è possibile definire colonne VARCHAR molto più lunghe di 255 byte o 255 caratteri. E farlo non infrange nessuna regola.