In riferimento alla Documentazione Postgres su Character Types, non sono chiaro sul punto di specificare una lunghezza per tipi variabili (varchar).Perché specificare una lunghezza per i tipi di caratteri variabili
Assunzione:
- la lunghezza di corda non importa per l'applicazione.
- non vi interessa che qualcuno mette che la dimensione massima del database
- si dispone di spazio illimitato su disco rigido
Lo fa menzione:
L'esigenza di archiviazione per una breve stringa (fino a 126 byte) è 1 byte più la stringa effettiva, che include lo spazio vuoto nella custodia di carattere. Stringhe più lunghe hanno 4 byte di overhead anziché 1. Le stringhe lunghe vengono compresse automaticamente dal sistema, pertanto il requisito fisico su disco potrebbe essere inferiore. I valori molto lunghi sono anche memorizzati nelle tabelle di sfondo in modo che non interferiscano con l'accesso rapido ai valori di colonna più brevi. In ogni caso, la stringa di caratteri più lunga che è possibile memorizzare è di circa 1 GB. (Il valore massimo che sarà consentito per n nella dichiarazione del tipo di dati è inferiore a quella . Non sarebbe utile cambiare questo perché con multibyte codifiche dei caratteri il numero di caratteri e byte può essere molto differente .
questo parla la dimensione di corda, non la dimensione del campo, (cioè suona come sarà sempre comprimere uno stringa di grandi dimensioni in un grande campo varchar, ma non una piccola stringa in un grande campo varchar?)
Chiedo questa domanda come sarebbe molto più facile (e pigro) specificare una dimensione molto più grande quindi non devi mai preoccuparti di avere una stringa troppo l arge. Ad esempio, se si specifica varchar (50) per un nome di luogo, otterrò posizioni che hanno più caratteri (es. Llanfairpwllgwyngyllgogerychwyrndrobwllllantysiliogogogoch), ma se si specifica varchar (100) o varchar (500), sono meno incline a ottenere quel problema .
Quindi si otterrebbe un risultato in termini di prestazioni tra varchar (500) e (arbitrariamente) varchar (5000000) o text() se la stringa più grande era lunga 400 caratteri?
Anche senza interesse se qualcuno ha la risposta a questo E conosce la risposta a questo per altri database, si prega di aggiungere anche questo.
Ho cercato su Google, ma non ho trovato una spiegazione sufficientemente tecnica.
Uso 'Text' (o' varchar') insieme con vincoli di controllo che limita la lunghezza è un po 'più flessibile rispetto all'utilizzo 'varchar (nn)'. Cambiare il limite di lunghezza è facile come cadere e ricreare il vincolo di controllo, mentre un ALTER TABLE da estendere ad es. varchar (20) in varchar (50) può richiedere molto tempo su un grande tavolo e mette un blocco esclusivo su quel tavolo. –
Ottimi collegamenti ...! –