AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi SELECT * FROM … WHERE LIKE '%SONDERZEICHEN%'
Thema durchsuchen
Ansicht
Themen-Optionen

SELECT * FROM … WHERE LIKE '%SONDERZEICHEN%'

Ein Thema von PaulJr · begonnen am 16. Nov 2007 · letzter Beitrag vom 21. Nov 2007
Antwort Antwort
Seite 1 von 3  1 23      
PaulJr

Registriert seit: 10. Feb 2007
Ort: Stuttgart
66 Beiträge
 
#1

SELECT * FROM … WHERE LIKE '%SONDERZEICHEN%'

  Alt 16. Nov 2007, 14:26
Datenbank: MsSQL/MySQL/Oracle • Zugriff über: ODBC
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:

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.
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.201 Beiträge
 
Delphi 10.4 Sydney
 
#2

Re: SELECT * FROM … WHERE LIKE '%SONDERZEICHEN%'

  Alt 16. Nov 2007, 14:35
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".
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
soulies

Registriert seit: 9. Dez 2005
234 Beiträge
 
#3

Re: SELECT * FROM … WHERE LIKE '%SONDERZEICHEN%'

  Alt 16. Nov 2007, 14:45
hi,

Zitat:
Natürlich, als Ergebnis sollte eine leere Datenmenge zurück kommen, da kein BLZ Feld enthält

ein Sonderzeichen.
vllt. hilft es auch dein Bankleit-ZAHLEN Feld von Varchar zu Int(10) zu ändern,
schließlich gibt es keine BLZ mit Buchstaben.


cya
  Mit Zitat antworten Zitat
PaulJr

Registriert seit: 10. Feb 2007
Ort: Stuttgart
66 Beiträge
 
#4

Re: SELECT * FROM … WHERE LIKE '%SONDERZEICHEN%'

  Alt 16. Nov 2007, 14:50
Hallo Bernhard,

danke für Deine Tips…

wenn Du etwas über mich wissen möchtest, dann schau mal hier:

PaulJr

ansonsten warte ich auf präzise Tipps…, die Du mir mit Sicherheit auch geben kannst

Viele Grüße

PaulJr.
  Mit Zitat antworten Zitat
PaulJr

Registriert seit: 10. Feb 2007
Ort: Stuttgart
66 Beiträge
 
#5

Re: SELECT * FROM … WHERE LIKE '%SONDERZEICHEN%'

  Alt 16. Nov 2007, 15:10
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
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.201 Beiträge
 
Delphi 10.4 Sydney
 
#6

Re: SELECT * FROM … WHERE LIKE '%SONDERZEICHEN%'

  Alt 16. Nov 2007, 21:09
Zitat von PaulJr:
ansonsten warte ich auf präzise Tipps…, die Du mir mit Sicherheit auch geben kannst
Wieso genauer?
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.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
PaulJr

Registriert seit: 10. Feb 2007
Ort: Stuttgart
66 Beiträge
 
#7

Re: SELECT * FROM … WHERE LIKE '%SONDERZEICHEN%'

  Alt 16. Nov 2007, 23:21
Wha wha we wha

Leider ist Deine Antwort lieber Bernhard, genauso wie Deine erste Antwort zu diesem Thema überhaupt nicht zu gebrauchen.

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.
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.201 Beiträge
 
Delphi 10.4 Sydney
 
#8

Re: SELECT * FROM … WHERE LIKE '%SONDERZEICHEN%'

  Alt 16. Nov 2007, 23:42
Zitat von PaulJr:
Ich habe hier ein einfaches SQL-Befehl präsentiert die mit irgendwelchen KOMPONENTEN
nichts zu tun hat:
Und woher weist du das? Wir haben eine große Anwendung die genau diese aufgeführte DBs unterstützt und wir können (per Unit-Tests abgesichert) x-Beliebige Unicode-Zeichen abfragen. Werde mal Montags gleich den ³-Fall als Sonderfall aufnehmen. Und jede Datenbank hat Eigenheiten bei solchen speziellen Dingen. Du kannst eine Oracle-Datenbank-Installation haben die nicht mal Sonderzeichen wie üöä speichern kann (u.U. "³" doch da es in der verwendeten Codepage der DB vorhanden ist).

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 MySQL zu diesem Thema durchlesen. Und wenn du nur den generischen Weg über ODBC verwendest fehlen dir u.U. geeignete "Schalter" um das gewünschte Verhalten bei der verwendeten Datenbank abzufragen.

Hab gerade noch was für MS SQL zusammengegoogelt:
SQL Server and collation
Internationale Features in Microsoft SQL Server 2000

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.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#9

Re: SELECT * FROM … WHERE LIKE '%SONDERZEICHEN%'

  Alt 16. Nov 2007, 23:47
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.

select cast ('³as int) Ergibt '3'.

select charindex ('³','x123') Ergibt '4'.

"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
PaulJr

Registriert seit: 10. Feb 2007
Ort: Stuttgart
66 Beiträge
 
#10

Re: SELECT * FROM … WHERE LIKE '%SONDERZEICHEN%'

  Alt 17. Nov 2007, 00:40
Zitat:
(…)
„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…


Viele Grüße

PaulJr.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


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 14:23 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