AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Text sucherei

Ein Thema von Gruber_Hans_12345 · begonnen am 3. Jul 2012 · letzter Beitrag vom 3. Jul 2012
Antwort Antwort
Seite 1 von 2  1 2      
Gruber_Hans_12345

Registriert seit: 14. Aug 2004
1.426 Beiträge
 
Delphi 2007 Professional
 
#1

Text sucherei

  Alt 3. Jul 2012, 09:11
Datenbank: Firebird • Version: 2.5 • Zugriff über: SQL
Hallo

foglendes Problem, ich habe eine DB wo ich Strings drinnen stehen habe die auch umlaute habe, diese sind als "normale" Varchar ohne COLLATE usw angelegt, und das kann ich auch nicht so schnell ändern.

Nun muß ich in diesen Feldern suchen

ein
WHERE UPPER(BEZEICHNUNG) LIKE '%TEST%';
funktioniert

nur was nicht funktioniert ist wenn im Suchtext ein umlaut drinnen ist, da ja das UPPER aus "testäödr" ein "TESTäöDR" macht.

was funktioniert wäre ja folgendes
Code:
UPPER(CAST(BEZEICHNUNG AS BLOB CHARACTER SET ISO8859_1) COLLATE DE_DE) LIKE '%TEÖÄ%'
nur das problem ist, das es so grotten langsam ist, dauert statt noramlerweise 2 Sekunden, 4 Minuten

Habe ich da noch eine andere möglichkeit?
Gruss Hans

2B or not 2B, that is FF
  Mit Zitat antworten Zitat
tsteinmaurer

Registriert seit: 8. Sep 2008
Ort: Linz, Österreich
530 Beiträge
 
#2

AW: Text sucherei

  Alt 3. Jul 2012, 09:26
Hallo,

* Mit welchem Zeichensatz wurde die Datenbank erstellt?
* Von welchem Typ ist BEZEICHNUNG?
* Mit welchem Zeichensatz wurde BEZEICHNUNG erstellt?
* Mit welchem Zeichensatz verbindest du dich zur Datenbank?
  Mit Zitat antworten Zitat
Gruber_Hans_12345

Registriert seit: 14. Aug 2004
1.426 Beiträge
 
Delphi 2007 Professional
 
#3

AW: Text sucherei

  Alt 3. Jul 2012, 09:49
Also ich suche in zwei Feldern

BEZEICHNUNG VARCHAR(200)
BESCHREIBUNG BLOB SUB_TYPE TEXT

Zeichensatz wurde weder beim erstellen der DB noch bei den Feldern was eingestellt (Wie und wo kann ich da nachschauen, was da drinnensteht)
es ist einfach ein gewachsenes System, daher sind änderung nur sehr sehr schwer durchzuführen (Oder auch verbesserungen )
Gruss Hans

2B or not 2B, that is FF
  Mit Zitat antworten Zitat
Gruber_Hans_12345

Registriert seit: 14. Aug 2004
1.426 Beiträge
 
Delphi 2007 Professional
 
#4

AW: Text sucherei

  Alt 3. Jul 2012, 10:04
so das hier meinst oder?

Code:
CREATE DATABASE 'test.fdb' PAGE_SIZE 8192
 DEFAULT CHARACTER SET NONE                                                                                        


CREATE TABLE "ARTIKEL"
(
  "ID"  INTEGER NOT NULL,
  "BEZEICHNUNG"  VARCHAR(200),
  "BESCHREIBUNG"  BLOB SUB_TYPE 0 SEGMENT SIZE 80
);
Gruss Hans

2B or not 2B, that is FF
  Mit Zitat antworten Zitat
tsteinmaurer

Registriert seit: 8. Sep 2008
Ort: Linz, Österreich
530 Beiträge
 
#5

AW: Text sucherei

  Alt 3. Jul 2012, 10:04
Zitat:
Zeichensatz wurde weder beim erstellen der DB noch bei den Feldern was eingestellt (Wie und wo kann ich da nachschauen, was da drinnensteht)
Schlecht, weil dann läuft alles im Kontext von NONE. Im Prinzip akzeptiert hier Firebird alles, ohne dabei irgendwelche Überprüfungen im Kontext des verwendeten Zeichensatzes durchzuführen inkl. weiss Firebird hier dann eben nicht was mit Umlauten etc. zu tun ist. Ganz vereinfacht dargestellt.

Kurzfristig kann man sich mit den unterschiedlichen CASTs drüberhelfen, aber das ist längerfristig keine Option. LIKE '%...%' würde dir zwar eh keinen Index verwenden, aber z.B. bei LIKE '...%' auf einem VARCHAR sehr wohl, allerdings wird das durch ein CAST mit COLLATE etc. wieder ausgehebelt und es wird somit kein Index verwendet.

Ich befürchte, längerfristig solltet ihr eine Migration auf einen Zeichensatz eurer Anforderungen entsprechend anstreben.
  Mit Zitat antworten Zitat
Gruber_Hans_12345

Registriert seit: 14. Aug 2004
1.426 Beiträge
 
Delphi 2007 Professional
 
#6

AW: Text sucherei

  Alt 3. Jul 2012, 10:13
Hmmm, auf was soll man da dann migrieren, ich habe ja das problem, das die gleiche datenbank ja auch in anderne ländern funktionieren sollte (Also Tschechei, Ungarn, Slowakei, Serbien ... )
ich hatte bis vor kurzen eine "Lösung" indem ich eine UDF Funktion gemacht habe, die halt ein ANSIUPPERCASE macht aber das problem war halt das diese UDF halt wieder bestimmte anzahl von zeichen zurückgeben muß

Das COLLATE ist so langsam das ich es wieder rausgeben mußte ...

Siehst du einen kurzfristigen weg, mit dem man das lösen kann OHEN die Db anzugreifen (ich möchte nun ungern über 100 DB's umändern ... )
vorrangig geht es mir nur um die äöü die ich mit dem UPPER nicht schaffe...
Gruss Hans

2B or not 2B, that is FF
  Mit Zitat antworten Zitat
Blup

Registriert seit: 7. Aug 2008
Ort: Brandenburg
1.429 Beiträge
 
Delphi 10.4 Sydney
 
#7

AW: Text sucherei

  Alt 3. Jul 2012, 10:34
Alle Kombinationen der Umlaute angeben:
Code:
WHERE (UPPER(BEZEICHNUNG) LIKE '%TESTäöDR%') or
      (UPPER(BEZEICHNUNG) LIKE '%TESTÄöDR%') or
      (UPPER(BEZEICHNUNG) LIKE '%TESTäÖDR%') or
      (UPPER(BEZEICHNUNG) LIKE '%TESTÄÖDR%');
In der Regel werden höchstens 1 bis 2 Umlaute im Suchtext sein.
Sind mehr als 3 enthalten, würde ich den Suchtext nach dem 3. Umlaut einkürzen.
  Mit Zitat antworten Zitat
tsteinmaurer

Registriert seit: 8. Sep 2008
Ort: Linz, Österreich
530 Beiträge
 
#8

AW: Text sucherei

  Alt 3. Jul 2012, 10:51
Zitat:
Hmmm, auf was soll man da dann migrieren, ich habe ja das problem, das die gleiche datenbank ja auch in anderne ländern funktionieren sollte (Also Tschechei, Ungarn, Slowakei, Serbien ... )
Naja, mit Unicode wärst halt auf der sicheren Seite. Aber damit das Sinn macht, muss auch die Client-Anwendung, Delphi etc. mitmachen.
Zitat:
Das COLLATE ist so langsam das ich es wieder rausgeben mußte ...
Du könntest mal versuchen den CAST im Falle von BEZEICHNUNG nicht auf einen BLOB sondern auf einen VARCHAR zu machen. Vielleicht hilft das bzgl. Performance. Ein Index wird dir da aber nie verwendet werden.
Zitat:
Siehst du einen kurzfristigen weg, mit dem man das lösen kann OHEN die Db anzugreifen (ich möchte nun ungern über 100 DB's umändern ... )
Ehrlich gesagt keinen Vernünftigen. Haben sich deine Kunden noch nie beschwert, dass z.B. auch die Sortierung nach Textfeldern eine Katastrophe ist?
  Mit Zitat antworten Zitat
Iwo Asnet

Registriert seit: 11. Jun 2011
313 Beiträge
 
#9

AW: Text sucherei

  Alt 3. Jul 2012, 10:53
Wieso baut man sich dafür keine UDF?
WHERE UDFMatches(Field,'%Sörtschtäxt%')
  Mit Zitat antworten Zitat
Gruber_Hans_12345

Registriert seit: 14. Aug 2004
1.426 Beiträge
 
Delphi 2007 Professional
 
#10

AW: Text sucherei

  Alt 3. Jul 2012, 10:59
Das mit der sortierung ist unsofern "kein Problem", da dies der Client erledigt.

Das mit dem UDF Match wäre sicher mal ne interessante lösung, brauche zwar dann zwei (einmal varchar und einmal blob)

gibt es irgendwo ein tutorial wie ich die Datenbank von meinem NONE CHARSET in ein vernünftiges (passt dieses ISO8859_1) wandeln kann?
Gruss Hans

2B or not 2B, that is FF
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:07 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz