Autor |
Beitrag |
JRegier
      
Beiträge: 1268
Win XP Home, Prof, 2003 Server
D6 Enterprise
|
Verfasst: Fr 22.07.05 06:10
Hi, wie ist es muß ich Trim(String) machen wenn ich werte in die DB Speichern will?
Ich meine wenn ich später suche in der DB und es enthält Leerzeichen kann es gefunden werden wenn ich ohne Leerzeichen suche
und in der DB ist es mit Leerzeichen?
|
|
Udontknow
      
Beiträge: 2596
Win7
D2006 WIN32, .NET (C#)
|
Verfasst: Fr 22.07.05 08:09
Hallo!
Natürlich kann auch ein Teilstring gesucht werden (entweder über SQl-Einschränkung und Verwendung von 'starting with' oder 'like "Teilstring%"', oder aber durch ein Locate mit der Option loPartialKey), allerdings ist es klüger, die Strings getrimmt zu speichern, da man mit einem direkten Vergleich schneller Ergebnisse bekommt.
Cu,
Udontknow
|
|
JRegier 
      
Beiträge: 1268
Win XP Home, Prof, 2003 Server
D6 Enterprise
|
Verfasst: Fr 22.07.05 08:14
Udontknow hat folgendes geschrieben: | Hallo!
Natürlich kann auch ein Teilstring gesucht werden (entweder über SQl-Einschränkung und Verwendung von 'starting with' oder 'like "Teilstring%"', oder aber durch ein Locate mit der Option loPartialKey), allerdings ist es klüger, die Strings getrimmt zu speichern, da man mit einem direkten Vergleich schneller Ergebnisse bekommt.
Cu,
Udontknow |
Vielen Dank! Power Delphianer 
|
|
jaevencooler
      
Beiträge: 166
Erhaltene Danke: 6
MS-DOS,Win32, Win95, Win 98, Me,XP, Linux, NT4.0, NT 2000-2008, Vista, Windows 7
Turbo Pascal,D1 Enter,D2 Enter,D3 Enter,D5 Enter, Kylix, D2007, PL/SQL, MS/SQL, Delphi 2010, Delphi XE
|
Verfasst: Fr 22.07.05 09:33
Moin, Moin,
es ist nicht unbedingt ausreichend wenn man Strings getrimmt speichert. Je nach der Definition Deines Datenbankfeldes in den Du den String speicherst, gehen diese Information eventuell verloren.
Du musst also genau darauf achten wie die Datenbank  die gespeicherten Werte behandelt, bei Oracle z.B. verhält es sich folgendermaßen:
1.) definierst Du das Datenfeld als char, dann wird  immer  die definierte Feldlänge ausgelesen, nicht die Länge des gespeicherten Strings.
2.) definierst Du das Datenfeld als Varchar(2), dann wird der gespeicherte String in seiner Länge ausgelesen.
es hängt also maßgeblich von der verwandten Datenbank ab, und dem Datentyp in den Du den String speicherst.
Beste Grüße
Michael
_________________ Wissen ist Macht, nichts wissen macht auch nichts...
|
|
JRegier 
      
Beiträge: 1268
Win XP Home, Prof, 2003 Server
D6 Enterprise
|
Verfasst: Fr 22.07.05 10:06
jaevencooler hat folgendes geschrieben: | definierst Du das Datenfeld als char, dann wird immer die definierte Feldlänge ausgelesen, nicht die Länge des gespeicherten Strings.
|
Da wir hier beim Thema Char sind, wieso ist es nicht sinnvoller Varchar verwenden da ja dabei nur die länge des Strings gespeichert wird also man spart Speicherplatz!
Und Char wenn die daten gespeichert werden werden denn bis zur definierten länge Leerzeichen angehängt?
|
|
jasocul
      
Beiträge: 6393
Erhaltene Danke: 147
Windows 7 + Windows 10
Sydney Prof + CE
|
Verfasst: Fr 22.07.05 10:13
Bei Char muss die DB sich nicht um die Verwaltung der tatsächlichen Länge kümmern.
Das ist eine Kosten-Frage: Speicherplatz gegenüber Geschwindigkeit (Rechnerauslastung).
|
|
JRegier 
      
Beiträge: 1268
Win XP Home, Prof, 2003 Server
D6 Enterprise
|
Verfasst: Fr 22.07.05 10:16
jasocul hat folgendes geschrieben: | Bei Char muss die DB sich nicht um die Verwaltung der tatsächlichen Länge kümmern.
Das ist eine Kosten-Frage: Speicherplatz gegenüber Geschwindigkeit (Rechnerauslastung). |
Ah, so na ja vielen Dank für  !
|
|
jaevencooler
      
Beiträge: 166
Erhaltene Danke: 6
MS-DOS,Win32, Win95, Win 98, Me,XP, Linux, NT4.0, NT 2000-2008, Vista, Windows 7
Turbo Pascal,D1 Enter,D2 Enter,D3 Enter,D5 Enter, Kylix, D2007, PL/SQL, MS/SQL, Delphi 2010, Delphi XE
|
Verfasst: Fr 22.07.05 10:20
Moin, Moin,
Zitat: |
Da wir hier beim Thema Char sind, wieso ist es nicht sinnvoller Varchar verwenden da ja dabei nur die länge des Strings gespeichert wird also man spart Speicherplatz!
|
Naja, das leider nicht ganz, die Datenbank reserviert zumindestens immer den max. Speicherplatz den das Datenfeld benötigen könnte. Wenn du jedoch große Stringdaten zu speichern hast, ist auf jeden Fall das Varchar2 feld die zu wählende Option, spart Platz auf der Platte.
Das gilt im übrigen auch für Float Felder, egal ob du sagt das Feld soll 15 Stellen, 5 Stellen oder 10 Stellen haben, die Datenbank reserviert immer die gleiche maximale Floatlänge.
Zitat: |
Und Char wenn die daten gespeichert werden werden denn bis zur definierten länge Leerzeichen angehängt?
|
Es ist nicht die Frage des Speicherns, sondern die Frage des auslesen !
Wenn Du ein Char Feld ausliest, dann wird die Datenfeldlänge ausgelesen, liest Du ein Varchar2 aus dann wird die Länge des gespeichterten Strings ausgelesen, die datenbank impliziert sozusagen ein Trim()
Grundsätzlich kann man sagen, ein Varchar2 ist einem Char immer vorzuziehen, es sei denn Deine daten sind nur 1-5 zeichen lang, oder Du benötigst immer eine feste Länge der Daten.
beste Grüße
Michael
_________________ Wissen ist Macht, nichts wissen macht auch nichts...
|
|
|