Premiär! Fyndchans i SweClockers Månadens Drop
Permalänk
Medlem

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?

Visa signatur

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 || Skärm:Samsung Odyssey G9 || Windows 10

Permalänk
Medlem
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.

Visa signatur

Desktop: Ryzen 5800X3D || MSI X570S Edge Max Wifi || Sapphire Pulse RX 7900 XTX || Gskill Trident Z 3600 64GB || Kingston KC3000 2TB || Samsung 970 EVO Plus 2TB || Samsung 960 Pro 1TB || Fractal Torrent || Asus PG42UQ 4K OLED
Proxmox server: Ryzen 5900X || Asrock Rack X570D4I-2T || Kingston 64GB ECC || WD Red SN700 1TB || Blandning av WD Red / Seagate Ironwolf för lagring || Fractal Node 304

Permalänk
Medlem
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

Visa signatur

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

Permalänk
Medlem
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.

Permalänk
Medlem
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

Visa signatur

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

Permalänk
Medlem

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

Skickades från m.sweclockers.com

Visa signatur

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

Permalänk
Medlem

Ok, tack!

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

Visa signatur

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 || Skärm:Samsung Odyssey G9 || Windows 10

Permalänk
Medlem

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?

Visa signatur

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 || Skärm:Samsung Odyssey G9 || Windows 10

Permalänk
Medlem
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.

Visa signatur

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

Permalänk
Medlem

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.

Visa signatur

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 || Skärm:Samsung Odyssey G9 || Windows 10

Permalänk
Medlem
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)

Visa signatur

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

Permalänk
Medlem

@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?

Visa signatur

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 || Skärm:Samsung Odyssey G9 || Windows 10

Permalänk
Medlem
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
Visa signatur

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

Permalänk
Medlem
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.

Visa signatur

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 || Skärm:Samsung Odyssey G9 || Windows 10

Permalänk
Medlem
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".

Visa signatur

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

Permalänk
Medlem
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!

Visa signatur

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 || Skärm:Samsung Odyssey G9 || Windows 10