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

Hvad er nyt for ikke mere varchar(255)

Hvilken "VARCHAR(255)-regel" henviser du til?

Hver databaseleverandør kan frit implementere VARCHAR, som de vil. Reglerne (og retningslinjerne) for VARCHAR vil ikke nødvendigvis være de samme for alle databaser.

Hvad angår SQL-standarden, har jeg ikke rigtig kigget nærmere på det. Det kan være ret løst, så alle VARCHAR-implementeringer er alle fundet i overensstemmelse med standarden. Hvis SQL-standarden for VARCHAR er virkelig streng, kan DBMS-leverandører enten udvide standarden eller måske ikke være kompatible. Jeg tror ikke, at den faktiske standard betyder så meget. Det, der betyder noget, er de faktiske regler, der håndhæves af DBMS.

For så vidt angår en generel retningslinje, specificer en VARCHAR-længde, der er lang nok til at understøtte systemkravene. Hvis systemets krav er at tillade ikke mere end 200 tegn, så ville jeg angive længden som VARCHAR(200) .

Som en anden generel retningslinje skal du ikke definere VARCHAR-længder, der er større, end de behøver at være. VARCHAR-kolonner erklæret længere end nødvendigt kan have indflydelse på ressourcer og ydeevne.

Oracle-grænsen for VARCHAR-længde er 4000 tegn. (I tidligere versioner af Oracle var maksimum 2000. Hvis du har brug for mere end 4000 tegn, kan du bruge CLOB datatype.

SQL Server-grænse til VARCHAR(8000) , medmindre du angiver VARCHAR(MAX) som tillader en maksimal størrelse (i bytes) på 2^32-1.

MySQL har en grænse på 65.535 for maksimal rækkelængde. Så det begrænser effektivt størrelsen af ​​VARCHAR til VARCHAR(21844), hvis du bruger et multibyte-tegnsæt som utf8. Med et enkelt byte-tegnsæt (som latin1) ville maksimum være VARCHAR(65532). Hvis du har brug for flere tegn end det, eller du løber ind i grænsen for den maksimale rækkelængde, kan du bruge TEXT datatype i stedet for VARCHAR.

De fleste DBMS VARCHAR implementeringer gemmer et "længde" felt for en VARCHAR kolonne sammen med værdien. længden gemmes som et heltal.

I nogle DBMS, hvis den maksimale længde (i bytes) af en VARCHAR kolonne ikke overstiger 255 bytes, kan længdefeltet implementeres som et enkelt byte heltal. Hvis kolonnen tillader mere end 255 bytes, skal længdefeltet være større end en enkelt byte.

Med dynamiske rækkeformater, hvad angår rækkelagring, lagring af 10 tegn i en kolonne, er det lige meget, om kolonnen er defineret som VARCHAR(30) eller VARCHAR(1000). Med faste rækkeformater reserveres pladsen til kolonnens maksimale længde. Formatet for rækkelager vil afhænge af DBMS og i nogle tilfælde (MySQL) af lagermotoren og det angivne rækkeformat.

Ja, det er 2016. Og vi er nået langt siden introduktionen af ​​det første kommercielle relationelle databasesystem.

Databasen er kun en del af systemet. Der kan være begrænsninger i applikationen eller andre softwarekomponenter. (Hvis applikationen er skrevet i C, og applikationen definerer en struktur med et byte-array for feltet, vil grænsen for størrelsen der være vigtig. En forøgelse af den tilladte størrelse i databasen vil ikke automatisk rette applikationen .

Der kan også være længdegrænser/begrænsninger i Javascript-kode eller i HTML-elementer på en webside. Eller der kan være begrænsninger for andre softwarekomponenter. For eksempel har nogle af de virkelig gamle SQL Server ODBC-drivere en grænse på 255 tegn (bytes?) for både CHAR- og VARCHAR-kolonner.

Så længden af ​​en VARCHAR i databasen er kun en del af historien.

Med alt det sagt, er jeg stadig ikke klar over, hvad du mener, når du spørger

Kan vi bryde VARCHAR(255)-reglen?

Jeg spekulerer på, hvilken "regel" du henviser til. I de fleste databaser, jeg kender til, er det muligt at definere VARCHAR-kolonner meget længere end 255 bytes eller 255 tegn. Og at gøre det bryder ikke nogen regel.




  1. Loop på borde med PL/pgSQL i Postgres 9.0+

  2. PostgreSQL søg og erstat where condition

  3. Postgresql:Beregn rang efter antallet af sande OR-sætninger

  4. Sikkerhedskopier automatisk MySQL-database på linux-serveren