![]() |
Datenbank: MsSQL/MySQL/Oracle • Zugriff über: ODBC
SELECT * FROM … WHERE LIKE '%SONDERZEICHEN%'
SELECT * FROM … WHERE LIKE '%SONDERZEICHEN%'
_______________________________________________ Hallo Datenbank Experten, :???: vielleicht kann mir hier jemand bei meinem Problem helfen… Ein simpler SQL-Befehl der auf eine MsSQL Tabelle mit z.B. BLZ-Bank Daten abgefeuert wird liefert überraschende Ergebnisse: :shock: SELECT BLZ FROM BLZBANK WHERE BLZ LIKE '%³%' Oder auch das hier: SELECT BLZ FROM BLZBANK WHERE (UPPER(BLZ) LIKE UPPER('%³%')) Wohlgemerkt es handelt sich hier in dieser Abfrage NICHT um eine ‘3 ‘ sondern um ein Sonderzeichen: Eine hochgestellte drei: ³. Die Ergebnisse sind hier deswegen überraschend, da jeder Datensatz mit BLZ die eine „normale“ ‘3‘ enthält kommt als Ergebnis zurück (Das BLZ Feld ist vom Typ VARCHAR ). Natürlich, als Ergebnis sollte eine leere Datenmenge zurück kommen, da kein BLZ Feld enthält ein Sonderzeichen. Viele Grüße PaulJr. |
Re: SELECT * FROM … WHERE LIKE '%SONDERZEICHEN%'
1, Schmeiß ODBC sondern nimm Zugriffskomponenten wie z.B. von Core Labs
2, Verwende parametrisierte Abfragen 3, Um welche MySQL-Version handelt es sich und wie ist die Collation/Codepage der Datenbank? MySQL kann ab V4.1 Unicode (UTF8/UCS2) und je nachdem ob eine Zugriff das berücksichtigt oder nicht werden entsprechend deine Daten "behandelt". |
Re: SELECT * FROM … WHERE LIKE '%SONDERZEICHEN%'
hi,
Zitat:
schließlich gibt es keine BLZ mit Buchstaben. cya |
Re: SELECT * FROM … WHERE LIKE '%SONDERZEICHEN%'
Hallo Bernhard, :???:
danke für Deine Tips… :shock: wenn Du etwas über mich wissen möchtest, dann schau mal hier: ![]() ansonsten warte ich auf präzise Tipps…, die Du mir mit Sicherheit auch geben kannst :mrgreen: Viele Grüße :-D PaulJr. |
Re: SELECT * FROM … WHERE LIKE '%SONDERZEICHEN%'
Hallo Soulies :???:
hier geht um ein Problem mit Sonderzeichen und das BLZ-Feld ist hier nur als Beispiel... Das FELD könnte auch genauso gut ARTNR oder [was weiß ich] heißen... Also: Datenbank MsSQL oder MySQL und Feld-Datentyp VARCHAR etc... und Frage: wie bekommt man hier zutrefende Ergebnisse... Gruß PaulJr |
Re: SELECT * FROM … WHERE LIKE '%SONDERZEICHEN%'
Zitat:
Du bekommst Probleme mit Zeichen die Ordnungszahltechnisch größer als #$007F sind. Diese können begründet sein das: 1, Der ODBC-Treiber/Protokollstack über ODBC zu viele Zeichenwandlungen durchführt bzw. die falsche Codepage/Charset-Einstellungen verwendet 2, Nur bei verwendung von Parametern du (fast) sicher sein kannst das deine Zeichen nich vom Query Analyser der Datenbank falsch interpretiert werden (Hier wäre z.B. auch noch das Sicherheitsloch SQL Injection zu nennen 3, Solange du kein Angabe zu verwendeter Collaction/Codepage der Datenbank du geben kannst ich keine genauren Infos geben kann auser das du u.U. eine Codepage/Collation verwendest die die geschilderten Effekte liefert. Bei allen Datenbanken ist es besser bezüglich Sonderzeichen (Erweitert: Unicode) wenn man: 1, nvarchars verwendet bzw. als Collation/Charset UTF8 2, parameter verwendet 3, Native Zugriffskomponenten wie MyDAC von Corelabs verwendet oder direkt die nativen ADO-Komponenten ohne ADOExpress/dbGo-Wrapper. |
Re: SELECT * FROM … WHERE LIKE '%SONDERZEICHEN%'
Wha wha we wha
Leider ist Deine Antwort lieber Bernhard, genauso wie Deine erste Antwort zu diesem Thema überhaupt nicht zu gebrauchen. :shock: Hat mit meinem Problem überhaupt NICHTS zu tun. Ich habe Zugriff über: ODBC eigetragen, weil sonst konnte ich hier nicht posten, da man hatte das hier verlangt. Genauso gut konnte ich schreiben: Zugriff über: „von oben nach unten und zurück“ aber dann würde man mir vielleicht ein Zugriff von LINKS NACH RECHTS empfohlen… Ich habe hier ein einfaches SQL-Befehl präsentiert die mit irgendwelchen KOMPONENTEN nichts zu tun hat: SELECT BLZ FROM BLZBANK WHERE BLZ LIKE '%³%' Ich habe schon langsam Angst hier z.B. zu schreiben, dass ich dieses Befehl direkt an einem MsSQL Server ausführe, da dann wird mir MySQL… oder gar Oracle empfohlen Vielleicht weiß jemand, wie ich dieses Befehl anders gestallten könnte um richtige Ergebnisse an einem Microsoft SQL Server zu bekommen. Viele Grüße PaulJr. |
Re: SELECT * FROM … WHERE LIKE '%SONDERZEICHEN%'
Zitat:
Dein Problem wird einfach sein das die Datenbank über den Weg ODBC und bei Nicht-Verwendung von Parameter einfach eine "³" im Query-String so wie du ihn angegeben hast bei einer Like-Abfrage einfach gleichwertig wie eine "richtige" "3" betrachtet und dir alle Records mit "3" im Feld zurückliefert egal ob nun die "3" hoch oder tiefgestellt ist. Die Regeln die eine Datenbank bei solchen Entscheidungen verwendet sind abhängig von den in der Datenbank (bei manchen Datenbanken kann auch auf Tabellen oder Feldebene gesonderte Angaben vorgenommen werden) verwendeten Collations und Codepages sowie der verwendeten. Evtl. solltest du dir mal die Dokumentation von ![]() Hab gerade noch was für MS SQL zusammengegoogelt: ![]() ![]() Leider habe ich in deinem ersten Beitrag überlesen das du für genau das ³-Problem nur beim MS SQL-Server probleme hast. Aber wenn du weiter in die Materie Datenbanken einsteigst wirst du früher oder später auch bei MySQL (später) und Oracle (früher) auf "komisches" Verhalten stoßen. |
Re: SELECT * FROM … WHERE LIKE '%SONDERZEICHEN%'
Ahoj
Is ja cool. Vermutlich arbeitet der Transact-SQL-Query-Analyzer auch mit ODBC, denn ich habe hier eine Tabelle mit einer IDENTITY-INT-Spalte (ca. 1 Mio Records) und -hä hä- funktioniert.
SQL-Code:
Ergibt '3'.
select cast ('³' as int)
SQL-Code:
Ergibt '4'.
select charindex ('³','x123')
:gruebel: |
Re: SELECT * FROM … WHERE LIKE '%SONDERZEICHEN%'
Zitat: :shock:
(…) „Aber wenn du weiter in die Materie Datenbanken einsteigst wirst du früher oder später auch bei MySQL (später) und Oracle (früher) auf "komisches" Verhalten stoßen.“ (…) Also wirklich, ich war ein paar Jahre Forum Moderator in Datenbankwesen … in einem Delphi-Forum die heute nicht mehr existiert... und mein Einstieg in diese Materie habe schon längst hinter mir... __________________________________________________ __________ Hallo Alzaimar, :???: DANKE, DANKE, genau solche Antworten, Anregungen bzw. Tipps (auch, wenn sich noch keine sofortige Lösung für mein Problem daraus ergibt) brauche ich. Ich habe etwas mit dieser Konvertierung-Funktion experimentiert (sehr interessant!) aber leider konnte ich kein zufriedenstellendes Ergebnis erziehen… :wall: Viele Grüße :) PaulJr. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:19 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