Char vs. VARCHAR

Char vs. VARCHAR
Char- og Varchar -datatypene i SQL er de mest fremtredende, da de lar oss lagre strengdata.

Denne opplæringen vil gå over hver datatype og skissere forskjellen.

SQL Char -typen

Kartypen refererer til en datatype som brukes til å lagre karakterstrenger av en fast lengde.

Kartypen lar deg spesifisere en bestemt størrelse for dataene du setter inn i den raden.

Selv om implementeringen av Char-typen kan variere litt i henhold til databasemotoren, i standard SQL, kan Char-typen ha opp til maksimalt 8000 ikke-unicode-tegn.

For å definere en lengde på en char -type, kan du bruke syntaks:

Char (N)

Der n refererer til antall (lengde) tegn du kan lagre.

Siden char -typen er av fast lengde, hvis du setter inn en streng med færre tegn enn den spesifiserte størrelsen, er strengen polstret med ekstra mellomrom for å matche settstrengen.

Tilsvarende, hvis du setter inn en streng med større lengde enn den angitte størrelsen, blir strengen avkortet til den angitte størrelsen.

For å illustrere, start med å lage en eksempeldatabase:

Merk at i dette eksemplet bruker vi PostgreSQL, men du kan velge hvilken som helst SQL -smak.

$ psql -u postgres

Opprett en eksempeldatabase:

Postgres =# Opprett database Sample_DB;

Koble til databasen.

Postgres =# \ C Sample_db

Lag et bord med to rader. Den første skal være en ID med auto-increment (seriell) og den andre av char-type.

Lag tabell char_v_varchar (id seriell, full_name char (15))

Merk at den maksimale lengden på full_navn -kolonnen er 15.

La oss nå legge til noen eksempeldata.

sett inn i char_v_varchar (full_name) verdier ('Aaron Wise'); - 10 tegn
sett inn i char_v_varchar (full_name) verdier ('Aaron Wise Jack'); - 15 tegn
sett inn i char_v_varchar (full_name) verdier ('Aaron Wise et annet navn bla bla'); - mer enn 15 tegn

Vær oppmerksom på de tre innsatsuttalelsene. Den første setter inn en verdi på 10 tegn, den andre tilfører en verdi på nøyaktig 15 tegn, og den andre tilfører en verdi av tegn større enn 15.

Den første verdien vil bli polstret med 5 flere romtegn for å maksimere settlengden hvis vi kjører koden over.

Den andre passer perfekt, og den tredje vil bli avkortet.

Å legge til en verdi som er større enn den innstilte lengden er forbudt i noen databasemotorer. For eksempel, i PostgreSQL, vil den andre innsatserklæringen mislykkes med en feil:

Feil: Verdi for lang for typekarakter (15)
SQL State: 22001

For å sjekke lengden på postene, kan vi kjøre spørringen:

velg lengde (full_name) fra char_v_varchar;

Koden over skal returnere lengden på hver rad i tabellen:

lengde
--------
15
15
(2 rader)

Merk at i noen databasemotorer kan du tillate deg å legge til en verdi av mindre lengde uten polstring med ekstra mellomrom.

Det er godt å huske at Char -typen bruker 1 byte for ett tegn som er satt inn.

SQL varchar -typen

I motsetning til røye, varchar eller variabel karaktertype, lagrer karakterstrengene i varierende lengder.

Dette betyr at du kan definere størrelsen på varchar -kolonnen. Du kan imidlertid legge til verdier av størrelse større enn eller mindre enn den innstilte lengden.

La oss ta et eksempel nedenfor:

Lag tabell char_v_varchar (id seriell, full_name varchar);

I dette tilfellet definerer vi en tabell med kolonnen til Varchar. Siden størrelsen på varchar kan variere, trenger vi ikke å sette en lengde.

Vi kan deretter sette inn tre verdier av varierende størrelse som:

sett inn i char_v_varchar (full_name) verdier ('Aaron Wise'); - 10 tegn
sett inn i char_v_varchar (full_name) verdier ('Aaron Wise Jack'); - 15 tegn
sett inn i char_v_varchar (full_name) verdier ('Aaron Wise et annet navn bla bla'); - mer enn 15 tegn
velg lengde (full_name) fra char_v_varchar;

Koden over bør sette inn tre poster og returnere størrelsen på hver.

Siste tanker

Dette er da på forskjellen mellom en røye og varchar -type. En røye har karakterstrenger med fast størrelse, mens en Varchar har en karakterstreng med varierende lengder.

Selv om varcharen kan virke anvendelig for de fleste situasjoner, kan den pådra seg betydelige ytelses treff hvis de brukes urimelig. Derfor, hvis ytelse er en kritisk faktor for databasen din, kan du vurdere å bruke en røye, med mindre det er nødvendig.