Antworten auf deine Fragen:
Neues Thema erstellen

Mysql Abfrage mit Leerzeichen am Ende

gonzo_sh

Noch nicht viel geschrieben

Ich habe eine Tabelle Tab mit 2 Spalten. Einem PrimaryIndex als Zahl und einem Varchar(20) als Name.
der erste Datensatz enthält die ID=1 und den Namen="Peter"

Jetzt stelle ich ein Abfrage die lautet
SELECT * FROM Tab WHERE name = "Peter";
Soweit ok, der Datensatz mit Peter wird ausgegeben.

Jetzt stelle ich die Abfrage ...
SELECT * FROM Tab WHERE name = "Peter ";
Und wieder der Datensatz ausgegeben! Trotz Leerzeichen?
Eigentlich dürfte er den Datensatz finden,
denn es gibt den Datesatz mit "Peter " nicht, sondern nur "Peter"

Vielleicht kann mir da jemdand helfen.

Danke
 

owieortho

Aktives Mitglied

AW: Mysql Abfrage mit Leerzeichen am Ende

wenn ich mich recht entsinne löscht mysql<5 Leerzeichen am Ende eines VARCHAR strings
 

Duddle

Posting-Frequenz: 14µHz

AW: Mysql Abfrage mit Leerzeichen am Ende

Stimmt:

Du müsstest wohl explizit nach char(32) suchen, also sowas wie:
Code:
SELECT * FROM Tab WHERE name = CONCAT("Peter", char(32));


Duddle
 

saila

Moderatorle

AW: Mysql Abfrage mit Leerzeichen am Ende

Hi,

ich würde prüfen, ob du bei deinem namen "Peter" nicht doch in der Tabelle "Peter " stehen hast. Also mit einem Leerzeichen am Ende. Den auf diese Weise kann das Ergebnis auch logisch erklärt werden. Du findest bei der Suche mit Bedingung "Peter" als auch "Peter " ein Ergebnis.

Das Bsp. von dir Duddle kann ich auf keine Weise bei mir ein einer Tabelle nachbilden. Seit sql 5 ist varchar oder char-Angabe relativ wurscht, da die Attributvergabe dynamisch erfolgt. Bsp. wäre ein insert in ein varchar(40) mit einer eigentl. Attr-Vergabe von varschar(500). Also ist der Satz > 40+3 bzw. > 255+3 (somit wie genannt 500+3), wird der Satz ungekürzt in das Feld gespielt. Auch bei dem darauffolgenden SELECT wird der vollständige Satz geliefert. CONCAT sollte unabhängig davon ersetzt werden durch den Operator OR oder ||, was die Performance deutlich anhebt - abgesehen von der * Anweisung, welche ohnehin vermieden werden sollte - was wiederum nicht dich Duddle betrifft :)
 

gonzo_sh

Noch nicht viel geschrieben

AW: Mysql Abfrage mit Leerzeichen am Ende

Vielen Dank für eure Antworten
@Saila Es gibt keine zwei Peter. Ich habe eine Tabelle mit nur diesem einen Datensatz angelegt.
Auch mit char und varchar komme ich nicht weiter.
Hat den jemand dieses Beispiel selber mal ausprobiert?
Mit der einer relative neuen Version MySQL.
Eigentlich ist das Ergebnis einer solchen Abfrage nicht korrekt.
Vielleicht hat das jemand noch eine Antwort darauf.

Gruß gonzo
 

saila

Moderatorle

AW: Mysql Abfrage mit Leerzeichen am Ende

Ich meinte, ob du geprüft hast, dass dein Eintrag statt "Peter" nicht doch "Peter " lautet. Dann würde es bei beiden Query's ein Ergebnis geben. Ansonsten geht die Abfrage mit einem Platzhalter z.B. nicht. Das wäre dann schon wieder LIKE.
 

gonzo_sh

Noch nicht viel geschrieben

AW: Mysql Abfrage mit Leerzeichen am Ende

@Saila habe ich geprüft

Du kannst sogar einen Select ausführen
der mehrere Lehrzeichen dahinter hat
und bekommst den Datensatz zurück.

Gruß gonzo
 
Zuletzt bearbeitet:

saila

Moderatorle

AW: Mysql Abfrage mit Leerzeichen am Ende

Also ich habe alles was hier mitgeteilt wurde getestet.

Korrigieren muss ich mich in dem Bereich, dass auch bei einem char-Type mehr Zeichen gespeichert werden, was nicht zutreffend ist. Das ist zutreffend für einen varchar-Type.
Bei char-Type, werden die überhängenden Insert-Bestandteile abgeschnitten.

So zum Thema zurück. Bei CHAR -und VARCHAR Typen, werden zu speichernde Inhalte voll übernommen - inkl. auch Leerzeichen am Ende. Unterschied wie zuvor beschrieben.

Ergo - dein Feldeintrag "Peter" muss also wie folgt in deinem DB-Feld eingetragen sein "Peter ". Also inkl. einem Leerzeichen. Somit findet mysql bei der Anfrage "Peter" nur den einen Eintrag "Peter ". Gleiches gilt auch bei der Anfrage nach "Peter ".

Wenn dem nicht so sein soll, dann bitte ich dich die Tabelle mit Inhalt zu exportieren und hier den Quellcode mitzuteilen. Darin müsste man direkt erkennen, wie der Eintrag "Peter" in der Tabelle vorgenommen wurde.
 

gonzo_sh

Noch nicht viel geschrieben

AW: Mysql Abfrage mit Leerzeichen am Ende

Hallo saila siehe (Erster Eintrag)

Ganz oben habe ich ja schon das Problem mitgeteilt.
Dort steht auch alles um es zu nachzubauen und zu testen.
Wer hat den es mal ausprobiert?

Guß Thorleif
 

saila

Moderatorle

AW: Mysql Abfrage mit Leerzeichen am Ende

Hallo saila siehe (Erster Eintrag)

Ganz oben habe ich ja schon das Problem mitgeteilt.
Dort steht auch alles um es zu nachzubauen und zu testen.
Wer hat den es mal ausprobiert?

Guß Thorleif

Naja, das ist schon nachgebaut und getestet unter mysql5.1 und 5.5. Wenn du mysql 4.x einsetzt, kann ich nicht mehr mit dienen als Tester, weil ich grundsätzlich auf die aktuell stabile Version update. Und ja - wie schon mitgeteilt und deshalb ja auch ausführlich beschreiben, ist es möglich, wenn du ein Leerzeichen in deinem Feld zu dem Eintrag mitgegeben hast (was auch der Hinweis von mir an dich war, das noch einmal zu überprüfen), ist ein Leerzeichen auch bei der Eingabe von "Peter" als auch unter "Peter " zu finden. Du kannst dir ja einmal Sicherheitshalber die ID ausgeben lassen, unter welcher dieser User in der Tabelle eingetragen wurde. Dann wirst du erkennen, das es ein und der selbe ist.

Zeit mal den Tabellenaufbau in Form eines Export inkl. der Inhalte der Tabelle. Ist möglich über phpMyAdmin. Dann erkennen wir direkt was da los ist.

Abgesehen davon - eine Suchanfrage mit einem Leerzeichen führt immer zu dem Ergebnis, welches du erhälst. Würdest du nun folgendes Vornehmen:
Code:
<?php
if(isset($_POST['userName'])) { $postUser = trim($_POST['userName']);
else echo 'Fehler';

if($userName != '') $query = 'SELECT * FROM Tab WHEE name = "'. mysql_real_escape_string($userName) .'"';
/* ... usw... */
?>
[/php]
Wäre deine Bedingung ohne Leerzeichen. Dennoch - selbst wenn du über den Query-Browser das ganze testen würdest, und du gibst mit oder ohne Leerzeichen ein, so wird letztlich dein Eintrag gefunden. Anderst wäre es z.B. wenn du nun nach "Peter T" suchen würdest. Dann hättest du kein Ergebnis mehr.

Du hast sicherlich bereits mysql 5.1 - da gehe ich schon mal von aus ;)
 
Zuletzt bearbeitet:
Bilder bitte hier hochladen und danach über das Bild-Icon (Direktlink vorher kopieren) platzieren.
Antworten auf deine Fragen:
Neues Thema erstellen

Willkommen auf PSD-Tutorials.de

In unseren Foren vernetzt du dich mit anderen Personen, um dich rund um die Themen Fotografie, Grafik, Gestaltung, Bildbearbeitung und 3D auszutauschen. Außerdem schalten wir für dich regelmäßig kostenlose Inhalte frei. Liebe Grüße senden dir die PSD-Gründer Stefan und Matthias Petri aus Waren an der Müritz. Hier erfährst du mehr über uns.

Stefan und Matthias Petri von PSD-Tutorials.de

Nächster neuer Gratisinhalt

03
Stunden
:
:
25
Minuten
:
:
19
Sekunden

Neueste Themen & Antworten

Flatrate für Tutorials, Assets, Vorlagen

Zurzeit aktive Besucher

Statistik des Forums

Themen
118.635
Beiträge
1.538.454
Mitglieder
67.558
Neuestes Mitglied
StarsMan
Oben