Autor Beitrag
tomycat
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 265
Erhaltene Danke: 1



BeitragVerfasst: So 19.07.15 22:04 
hallo,
ich will eine Tabelle die nach dem Barcode geht.
ausblenden SQL-Anweisung
1:
2:
3:
4:
5:
6:
CREATE TABLE allgemein (
  barcode int(20NOT NULL auto_increment,  <-------- 20 Stellen sollten für den Barcode reichen
  epreis varchar(255default NULL,
  vpreis varchar(255default NULL,
  PRIMARY KEY  (barcode)
);

Ein Barcode von meiner Weinflasche hat 12 Stellen.
In meinem C# Programm bekomme ich trotzdem "out of range"

Kann das so gehen? Kann ich das umgehen? Alternative?

Moderiert von user profile iconTh69: SQL-Tags hinzugefügt
Palladin007
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1282
Erhaltene Danke: 182

Windows 11 x64 Pro
C# (Visual Studio Preview)
BeitragVerfasst: So 19.07.15 22:37 
INT(20) bedeutet nicht, dass die Zahl maximal 20 Stellen lang sein kann, sondern dass die Zahlen auf 20 Stellen mit Nullen aufgefüllt werden.
Tatsächlich bleibt ein Integer immer ein Integer, 4 Bytes groß, maximal-Wert: 2147483647

Du solltest auch keine Zahlentyp nehmen, da damit dann alle vorangehenden Nullen verloren sind, da sie mathematisch betrachtet bedeutungslos sind.
aDas Mittel zur Wahl ist NVARCHAR(20), das bedeutet, Du kannst dort einen String bis maximal 20 Zeichen ablegen.

Für diesen Beitrag haben gedankt: tomycat
tomycat Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 265
Erhaltene Danke: 1



BeitragVerfasst: Mo 20.07.15 17:46 
soviel ich weis MUSS int immer die Zeilennummer sein bei einer Tabelle ?!
Oder liege ich da falsch?
Palladin007
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1282
Erhaltene Danke: 182

Windows 11 x64 Pro
C# (Visual Studio Preview)
BeitragVerfasst: Mo 20.07.15 18:05 
Du meinst den PrimaryKey, richtig?
Der darf (nagel mich nicht drauf fest) glaube ich alles sein.

Ich bin aber sowieso der Meinung, dass ein PrimaryKey möglichst keine tatsächlichen Daten beinhalten soll. Schließlich weißt Du nie, ob in deiner Anwendung doch irgendwann mal Dublikate von dem Code vorkommen würfen. Der PrimaryKey ist kein Aufwand, der Speicherverbrauch ist relativ gering (bei INT zumindest, UNIQUEIDENTIFIER bei MSSQL ist da etwas größer).
Wenn dein Code ebenfalls eindeutig sein soll, dann setze ein UNIQUE dazu, den PrimaryKey ersetzt das aber nicht.

Sprich:

Lege einen PrimaryKey vom Typ Int und mit AUTOINCREMENT an.
Lege eine weitere Spalte vom Typ NVARCHAR(20) mit UNIQUE an.

Das UNIQUE kannst Du im Nachhinein einfach entfernen, wenn es nötig ist, wäre der Code der PrimaryKey ginge das nicht so einfach.

Für diesen Beitrag haben gedankt: tomycat