![]() |
Datenbank: Firebird • Version: 2.5 • Zugriff über: SQL
Text sucherei
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:
nur das problem ist, das es so grotten langsam ist, dauert statt noramlerweise 2 Sekunden, 4 Minuten
UPPER(CAST(BEZEICHNUNG AS BLOB CHARACTER SET ISO8859_1) COLLATE DE_DE) LIKE '%TEÖÄ%'
Habe ich da noch eine andere möglichkeit? |
AW: Text sucherei
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? |
AW: Text sucherei
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 ;) ) |
AW: Text sucherei
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 ); |
AW: Text sucherei
Zitat:
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. |
AW: Text sucherei
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... |
AW: Text sucherei
Alle Kombinationen der Umlaute angeben:
Code:
In der Regel werden höchstens 1 bis 2 Umlaute im Suchtext sein.
WHERE (UPPER(BEZEICHNUNG) LIKE '%TESTäöDR%') or
(UPPER(BEZEICHNUNG) LIKE '%TESTÄöDR%') or (UPPER(BEZEICHNUNG) LIKE '%TESTäÖDR%') or (UPPER(BEZEICHNUNG) LIKE '%TESTÄÖDR%'); Sind mehr als 3 enthalten, würde ich den Suchtext nach dem 3. Umlaut einkürzen. |
AW: Text sucherei
Zitat:
Zitat:
Zitat:
|
AW: Text sucherei
Wieso baut man sich dafür keine UDF?
SQL-Code:
WHERE UDFMatches(Field,'%Sörtschtäxt%')
|
AW: Text sucherei
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? |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:16 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz