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

varchar(20) og varchar(50) er ens?

MySQL tilbyder et udvalg af lagringsmotorer. Den fysiske lagring af data afhænger af lagringsmotoren.

MyISAM-lagring af VARCHAR

I MyISAM, VARCHAR s optager typisk kun den faktiske længde af strengen plus en byte eller to af længden. Dette er gjort praktisk af designbegrænsningen af ​​MyISAM til bordlåsning i modsætning til rækkelåsefunktion. Konsekvenserne for ydeevne omfatter en mere kompakt cacheprofil, men også mere kompliceret (langsommere) beregning af postoffsets.

(Faktisk giver MyISAM dig en grad af valgmulighed mellem fast fysisk rækkestørrelse og variabel fysisk rækkestørrelse tabelformater afhængigt af kolonnetyper, der forekommer i hele tabellen. Forekomst af VARCHAR ændrer kun standardmetoden, men tilstedeværelsen af ​​en TEXT klat kræfter VARCHAR s i samme tabel for også at bruge metoden med variabel længde.)

Den fysiske lagringsmetode er særlig vigtig med indekser, som er en anden historie end tabeller. MyISAM bruger pladskomprimering til begge CHAR og VARCHAR kolonner, hvilket betyder, at kortere data fylder mindre i indekset i begge tilfælde.

InnoDB-lagring af VARCHAR

InnoDB, som de fleste andre nuværende relationsdatabaser, bruger en mere sofistikeret mekanisme. VARCHAR kolonner, hvis maksimale bredde er mindre end 768 bytes, vil blive gemt inline, med reserveret rum, der matcher den maksimale bredde. Mere præcist her :

InnoDB laver i øjeblikket ikke pladskomprimering i sine indekser, det modsatte af MyISAM som beskrevet ovenfor.

Tilbage til spørgsmålet

Alt ovenstående er dog kun en implementeringsdetalje, der endda kan ændre sig mellem versioner. Den sande forskel mellem CHAR og VARCHAR er semantisk, og det samme er den mellem VARCHAR(20) og VARCHAR(50) . Ved at sikre, at der ikke er nogen måde at gemme en streng på 30 tegn i en VARCHAR(20) , databasen gør livet lettere og bedre defineret for forskellige processorer og applikationer, som den angiveligt integrerer i en forudsigeligt fungerende løsning. Dette er den store sag.

Specifikt vedrørende personnavne, dette spørgsmål kan give dig nogle praktiske vejledninger. Folk med fulde navne over 70 UTF-8-tegn er alligevel i problemer.



  1. hvordan man fjerner duplikerede værdier fra MySQL-tabellen

  2. Kunne ikke læse værdien for automatisk stigning fra lagermotoren, fejlnummer:1467

  3. CHAR() eller VARCHAR() som primær nøgle i en ISAM MySQL-tabel?

  4. Tuning af SQL Server Reporting Services