Naar welke "VARCHAR(255)-regel" verwijst u?
Elke databaseverkoper is vrij om VARCHAR te implementeren zoals ze dat willen. De regels (en richtlijnen) voor VARCHAR zijn niet per se hetzelfde voor elke database.
Wat de SQL-standaard betreft, heb ik er niet echt naar gekeken. Het is misschien vrij losjes, dus alle VARCHAR-implementaties blijken allemaal te voldoen aan de standaard. Als de SQL-standaard voor VARCHAR echt streng is, kunnen DBMS-leveranciers de standaard uitbreiden of gewoon niet compliant zijn. Ik denk niet dat de werkelijke standaard er zoveel toe doet. Waar het om gaat, zijn de daadwerkelijke regels die worden afgedwongen door het DBMS.
Geef, voor zover een algemene richtlijn, een VARCHAR-lengte op die lang genoeg is om de systeemvereisten te ondersteunen. Als de vereiste van het systeem is om niet meer dan 200 tekens toe te staan, dan zou ik de lengte specificeren als VARCHAR(200)
.
Als een andere algemene richtlijn, definieer geen VARCHAR-lengtes die groter zijn dan nodig is. VARCHAR-kolommen die langer dan nodig zijn gedeclareerd, kunnen van invloed zijn op resources en prestaties.
Oracle-limiet voor VARCHAR-lengte is 4000 tekens. (In eerdere versies van Oracle was het maximum 2000. Als u meer dan 4000 tekens nodig heeft, kunt u CLOB
gebruiken gegevenstype.
SQL Server-limiet tot VARCHAR(8000)
, tenzij u VARCHAR(MAX)
opgeeft die een maximale grootte (in bytes) van 2^32-1 toestaat.
MySQL heeft een limiet van 65.535 voor de maximale rijlengte. Dus dat beperkt effectief de grootte van VARCHAR tot VARCHAR (21844), bij gebruik van een multibyte karakterset zoals utf8. Met een karakterset van één byte (zoals latin1), zou het maximum VARCHAR (65532) zijn. Als u meer tekens nodig heeft, of als u de limiet van de maximale rijlengte tegenkomt, kunt u het gegevenstype TEXT gebruiken in plaats van VARCHAR.
De meeste DBMS VARCHAR-implementaties slaan een veld "length" op voor een VARCHAR-kolom, samen met de waarde. de lengte wordt opgeslagen als een geheel getal.
Als in sommige DBMS de maximale lengte (in bytes) van een VARCHAR-kolom niet groter is dan 255 bytes, kan het lengteveld worden geïmplementeerd als een geheel getal van één byte. Als de kolom meer dan 255 bytes toestaat, moet het lengteveld groter zijn dan een enkele byte.
Met dynamische rij-indelingen, in termen van rijopslag, waarbij 10 tekens in een kolom worden opgeslagen, maakt het niet echt uit of de kolom is gedefinieerd als VARCHAR(30) of VARCHAR(1000). Bij vaste rijformaten wordt de ruimte voor de maximale lengte van de kolom gereserveerd. Het formaat voor rijopslag zal afhangen van het DBMS, en in sommige gevallen (MySQL) van de opslagengine en het gespecificeerde rijformaat.
Ja, het is 2016. En we hebben een lange weg afgelegd sinds de introductie van het eerste commerciële relationele databasesysteem.
De database is slechts een onderdeel van het systeem. Er kunnen limieten zijn in de applicatie of andere softwarecomponenten. (Als de toepassing in C is geschreven en de toepassing een structuur definieert met een bytearray voor het veld, zal de limiet voor de grootte daar belangrijk zijn. Het vergroten van de toegestane grootte in de database zal de toepassing niet automatisch herstellen .
Er kunnen ook lengtelimieten/beperkingen zijn in Javascript-code, of in HTML-elementen van een webpagina. Of er kunnen beperkingen zijn van andere softwarecomponenten. Sommige van de echt oude SQL Server ODBC-stuurprogramma's hebben bijvoorbeeld een limiet van 255 tekens (bytes?) voor zowel CHAR- als VARCHAR-kolommen.
Dus de lengte van een VARCHAR in de database is slechts een deel van het verhaal.
Dat gezegd hebbende, is het me nog steeds niet duidelijk wat je bedoelt, als je het vraagt
Kunnen we de VARCHAR(255)-regel overtreden?
Ik vraag me af welke "regel" je bedoelt. In bijna elke database die ik ken, is het mogelijk om VARCHAR-kolommen te definiëren die veel langer zijn dan 255 bytes of 255 tekens. En als je dat doet, overtreed je geen enkele regel.