Trädvy Permalänk
Medlem
Plats
Hässleholm
Registrerad
Jan 2008

varchar

Hej! När man anger varchar skriver man ju t.ex. varchar(10) i T-SQL. Om jag använder mindre än 10 så används mindre utrymme.

Vad händer om jag använder mer och om då utrymmet ökar, varför alls ange en siffra?

Chassi: Fractal Design Define C || Processor: Intel i7-8700K || Grafikkort: ASUS GeForce GTX 1080Ti ROG Strix Gaming || Moderkort: Gigabyte Z370 AORUS ULTRA WIFI || Minne: Corsair Vengeance LPX DDR4 3000MHz 32 Gb || Lagring: Samsung 860 EVO 1TB SSD || PSU: Seasonic Focus+ 850W 85+ GOLD PSU || Acer Predator XB271HU || Windows 10

Trädvy Permalänk
Medlem
Registrerad
Apr 2002
Skrivet av Larsp777:

Hej! När man anger varchar skriver man ju t.ex. varchar(10) i T-SQL. Om jag använder mindre än 10 så används mindre utrymme.

Vad händer om jag använder mer och om då utrymmet ökar, varför alls ange en siffra?

Det är en maxlängd du anger.

Intel i7 6850k || Asus X99-A II || Evga GTX 980Ti || Kingston HyperX Fury 2666 64GB || Samsung 950 Pro 512GB || XB270HU 1440p IPS G-Sync

Trädvy Permalänk
Medlem
Plats
skåne
Registrerad
Jun 2004
Skrivet av Larsp777:

Hej! När man anger varchar skriver man ju t.ex. varchar(10) i T-SQL. Om jag använder mindre än 10 så används mindre utrymme.

Vad händer om jag använder mer och om då utrymmet ökar, varför alls ange en siffra?

Det är ett sätt för databasen att 'öronmärka' utrymme för din data. Vill du använda mer så måste du ändra datatypen till tex varchar(128).
Du gör det för att databasen ska kunna veta hur mycket data du kommer att behöva lagra. Vet den inte om du vill lagra 1 tecken eller 2TB data så blir det svårare att hantera utrymme, prestanda, cache osv

Skickades från m.sweclockers.com

Oldschool [å:ldsku:l] adj. Användandet av datorprodukter som är äldre än 3 månader.

Trädvy Permalänk
Medlem
Registrerad
Nov 2016
Skrivet av Larsp777:

Vad händer om jag använder mer och om då utrymmet ökar, varför alls ange en siffra?

Nej den kommer trunkera data som läggs in i den kolumnen, något som det normalt kommer varnas om, typ "Data truncation: Data too long for column" eller liknande.

Däremot kan man i tex MSSQL använda sig av VARCHAR(MAX) där kan du stoppa in vilken längd som helst.

Trädvy Permalänk
Medlem
Plats
Arboga
Registrerad
Jan 2002
Skrivet av Larsp777:

Hej! När man anger varchar skriver man ju t.ex. varchar(10) i T-SQL. Om jag använder mindre än 10 så används mindre utrymme.

Vad händer om jag använder mer och om då utrymmet ökar, varför alls ange en siffra?

Eftersom det är maxlängd som anges kommer sql servern klippa det du försöker spara så det inte blir längre än vad som anges. Vet du inte hur långt du behöver och kör en hyfsat ny version av sql server kan du använda varchar(max)

Skickades från m.sweclockers.com

Intel Core i7 6700K | Gigabyte Z170X-UD3 | Corsair Vengeance LPX 16GB DDR4 2400Mhz | EVGA GTX 980Ti Hybrid | Samsung 950 PRO 256GB | Noctua NH-D15 | EVGA G2 750 | Fractal Design Define R5

Trädvy Permalänk
Medlem
Plats
skåne
Registrerad
Jun 2004

Tänk på att max inte är oändligt, det finns en limit även där!

Skickades från m.sweclockers.com

Oldschool [å:ldsku:l] adj. Användandet av datorprodukter som är äldre än 3 månader.

Trädvy Permalänk
Medlem
Plats
Hässleholm
Registrerad
Jan 2008

Ok, tack!

Så det är alltså dynamiskt endast från t.ex. 20 och neråt?

Chassi: Fractal Design Define C || Processor: Intel i7-8700K || Grafikkort: ASUS GeForce GTX 1080Ti ROG Strix Gaming || Moderkort: Gigabyte Z370 AORUS ULTRA WIFI || Minne: Corsair Vengeance LPX DDR4 3000MHz 32 Gb || Lagring: Samsung 860 EVO 1TB SSD || PSU: Seasonic Focus+ 850W 85+ GOLD PSU || Acer Predator XB271HU || Windows 10

Trädvy Permalänk
Medlem
Plats
Hässleholm
Registrerad
Jan 2008

En annan fråga på databaser.

När man skapar en tabell med främmande nyckel, måste man då ange att det är en främmande nyckel i T-SQL?

Chassi: Fractal Design Define C || Processor: Intel i7-8700K || Grafikkort: ASUS GeForce GTX 1080Ti ROG Strix Gaming || Moderkort: Gigabyte Z370 AORUS ULTRA WIFI || Minne: Corsair Vengeance LPX DDR4 3000MHz 32 Gb || Lagring: Samsung 860 EVO 1TB SSD || PSU: Seasonic Focus+ 850W 85+ GOLD PSU || Acer Predator XB271HU || Windows 10

Trädvy Permalänk
Medlem
Plats
Arboga
Registrerad
Jan 2002
Skrivet av Larsp777:

En annan fråga på databaser.

När man skapar en tabell med främmande nyckel, måste man då ange att det är en främmande nyckel i T-SQL?

Ja, annars blir det bara ett vanligt fält, en främmande nyckel gör ju en del verifieringar, t.ex. att nyckeln den refererar till existerar.

Intel Core i7 6700K | Gigabyte Z170X-UD3 | Corsair Vengeance LPX 16GB DDR4 2400Mhz | EVGA GTX 980Ti Hybrid | Samsung 950 PRO 256GB | Noctua NH-D15 | EVGA G2 750 | Fractal Design Define R5

Trädvy Permalänk
Medlem
Plats
Hässleholm
Registrerad
Jan 2008

Ok, för jag tror inte att man måste ange det i den dialekt som man kör i MySQL. Där räcker det nog att det är av samma typ.

Chassi: Fractal Design Define C || Processor: Intel i7-8700K || Grafikkort: ASUS GeForce GTX 1080Ti ROG Strix Gaming || Moderkort: Gigabyte Z370 AORUS ULTRA WIFI || Minne: Corsair Vengeance LPX DDR4 3000MHz 32 Gb || Lagring: Samsung 860 EVO 1TB SSD || PSU: Seasonic Focus+ 850W 85+ GOLD PSU || Acer Predator XB271HU || Windows 10

Trädvy Permalänk
Medlem
Plats
Arboga
Registrerad
Jan 2002
Skrivet av Larsp777:

Ok, för jag tror inte att man måste ange det i den dialekt som man kör i MySQL. Där räcker det nog att det är av samma typ.

Tror även MySQL behöver det (om det ska vara en ordentlig foreign key).

FOREIGN KEY (MyForeignKey) REFERENCES OtherTable(Id)

Intel Core i7 6700K | Gigabyte Z170X-UD3 | Corsair Vengeance LPX 16GB DDR4 2400Mhz | EVGA GTX 980Ti Hybrid | Samsung 950 PRO 256GB | Noctua NH-D15 | EVGA G2 750 | Fractal Design Define R5

Trädvy Permalänk
Medlem
Plats
Hässleholm
Registrerad
Jan 2008

@Zajin: Kanske om det ska vara korrekt men verkar fungera utan. Åtminstone på mindre tabeller.

Dock bör man väl ange en korrekt främmande nyckel antar jag.

Eller blir det automatiskt en främmande nyckel om kolumn-namnen är samma?

Chassi: Fractal Design Define C || Processor: Intel i7-8700K || Grafikkort: ASUS GeForce GTX 1080Ti ROG Strix Gaming || Moderkort: Gigabyte Z370 AORUS ULTRA WIFI || Minne: Corsair Vengeance LPX DDR4 3000MHz 32 Gb || Lagring: Samsung 860 EVO 1TB SSD || PSU: Seasonic Focus+ 850W 85+ GOLD PSU || Acer Predator XB271HU || Windows 10

Trädvy Permalänk
Medlem
Plats
Arboga
Registrerad
Jan 2002
Skrivet av Larsp777:

@Zajin: Kanske om det ska vara korrekt men verkar fungera utan. Åtminstone på mindre tabeller.

Dock bör man väl ange en korrekt främmande nyckel antar jag.

Eller blir det automatiskt en främmande nyckel om kolumn-namnen är samma?

En främmande nyckel är till för att förhindra att du gör dumma operationer, t.ex:
Du har en tabell med anställda, den har en främmande nyckel till tabellen med löner. Då kommer du inte kunna ta bort rader i lönetabellen så länge den raden finns kopplad i anställdtabellen.
Du kommer inte heller kunna koppla en icke existerande lön till en anställd. Den främmande nyckeln hjälper dig helt enkelt se till att du har korrekt data.

Skickades från m.sweclockers.com

Utökad förklaring

Intel Core i7 6700K | Gigabyte Z170X-UD3 | Corsair Vengeance LPX 16GB DDR4 2400Mhz | EVGA GTX 980Ti Hybrid | Samsung 950 PRO 256GB | Noctua NH-D15 | EVGA G2 750 | Fractal Design Define R5

Trädvy Permalänk
Medlem
Plats
Hässleholm
Registrerad
Jan 2008
Skrivet av Zajin:

En främmande nyckel är till för att förhindra att du gör dumma operationer, t.ex:
Du har en tabell med anställda, den har en främmande nyckel till tabellen med löner. Då kommer du inte kunna ta bort rader i lönetabellen så länge den raden finns kopplad i anställdtabellen.
Du kommer inte heller kunna koppla en icke existerande lön till en anställd. Den främmande nyckeln hjälper dig helt enkelt se till att du har korrekt data.

Skickades från m.sweclockers.com

Du menar att man får den funktionaliteten när man anger med nyckelordet FOREIGN KEY? Tror det du talar om är referensintegritet.

Chassi: Fractal Design Define C || Processor: Intel i7-8700K || Grafikkort: ASUS GeForce GTX 1080Ti ROG Strix Gaming || Moderkort: Gigabyte Z370 AORUS ULTRA WIFI || Minne: Corsair Vengeance LPX DDR4 3000MHz 32 Gb || Lagring: Samsung 860 EVO 1TB SSD || PSU: Seasonic Focus+ 850W 85+ GOLD PSU || Acer Predator XB271HU || Windows 10

Trädvy Permalänk
Medlem
Plats
Arboga
Registrerad
Jan 2002
Skrivet av Larsp777:

Du menar att man får den funktionaliteten när man anger med nyckelordet FOREIGN KEY? Tror det du talar om är referensintegritet.

Referensintegritet kan det mycket väl heta, är inte direkt någon databas-guru
Och ja, foreign keys kommer ge dig en del av det "gratis".

Intel Core i7 6700K | Gigabyte Z170X-UD3 | Corsair Vengeance LPX 16GB DDR4 2400Mhz | EVGA GTX 980Ti Hybrid | Samsung 950 PRO 256GB | Noctua NH-D15 | EVGA G2 750 | Fractal Design Define R5

Trädvy Permalänk
Medlem
Plats
Hässleholm
Registrerad
Jan 2008
Skrivet av Zajin:

Referensintegritet kan det mycket väl heta, är inte direkt någon databas-guru
Och ja, foreign keys kommer ge dig en del av det "gratis".

Jo, det heter det nog

Jag, fattar

Tack!

Chassi: Fractal Design Define C || Processor: Intel i7-8700K || Grafikkort: ASUS GeForce GTX 1080Ti ROG Strix Gaming || Moderkort: Gigabyte Z370 AORUS ULTRA WIFI || Minne: Corsair Vengeance LPX DDR4 3000MHz 32 Gb || Lagring: Samsung 860 EVO 1TB SSD || PSU: Seasonic Focus+ 850W 85+ GOLD PSU || Acer Predator XB271HU || Windows 10