Autor Beitrag
JRegier
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1268

Win XP Home, Prof, 2003 Server
D6 Enterprise
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2596

Win7
D2006 WIN32, .NET (C#)
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1268

Win XP Home, Prof, 2003 Server
D6 Enterprise
BeitragVerfasst: Fr 22.07.05 08:14 
user profile iconUdontknow 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 :D
jaevencooler
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
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
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1268

Win XP Home, Prof, 2003 Server
D6 Enterprise
BeitragVerfasst: Fr 22.07.05 10:06 
user profile iconjaevencooler 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 6393
Erhaltene Danke: 147

Windows 7 + Windows 10
Sydney Prof + CE
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1268

Win XP Home, Prof, 2003 Server
D6 Enterprise
BeitragVerfasst: Fr 22.07.05 10:16 
user profile iconjasocul 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 :idea: !
jaevencooler
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
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
BeitragVerfasst: 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() :lol:

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...