[MySQL] SELECT findet bestimmte Werte nicht

Ichthys

Lt. Commander
Registriert
März 2008
Beiträge
1.541
Hallo, ich habe eine Tabelle, in der es u. a. z. B. folgende Einträge gibt.
id name
1 IKEA
3 IKEA_2
67 IKEA_3
Wenn ich ein "SELECT * FROM `value` WHERE name = 'IKEA';" durchführe, findet er nichts.
Wenn ich ein "SELECT * FROM `value` WHERE name LIKE '%IKEA%' mache, findet er alle drei Einträge. Woran liegt das?
Ich habe schon geguckt, es scheint keine Leerstellen vor oder nach IKEA zu geben.
Nachtrag: Eine Excel-Datei war die Quelle der Daten. Beim Import habe ich mit einem strtoupper dafür gesorgt, dass alles groß geschrieben wurde
 
Zuletzt bearbeitet:
Hallo,

wie ist dein MySQL konfiguriert? Es gibt auch eine Einstellung, da unterscheidet er zwischen "ikea" und "IKEA".
Bei 'like' findet er Klein- und Großschreibung.

Gruß,
d2boxSteve
 
@d2boxSteve: Es ist alles groß geschriebe,

@Yuuri: Nein, wie bereits geschrieben. Ich hatte das auch vermutet, aber da ist nichts.

Noch als zusätzliche Information. Es war ein Exel-Import, welcher die Quelle der Daten war.
Ich habe mit einem strtoupper dafür gesorgt, dass alles groß geschrieben wurde.
Selbst wenn ich das Wort "IKEA" direkt aus der Exceldatei reinkopiere, findet er nichts!
 
Zuletzt bearbeitet:
Poste mal den ganzen Query und nicht nur so einen halben Schnipsel.

Kann ja gut sein, dass du dennoch einen Tippfehler hast, da z.B. 'IKEA';" unter Umständen falsch ist.
 
Mach einfach mal where like 'ikea' (also ohne %), dann sollte er dir nur die id 1 ausgeben.
Aber komisch ist das Problem schon. versuch trotzdem mal in den sql befehl ein trim einzubauen um ganz sicher zu gehen.
 
Zuletzt bearbeitet:
Das habe ich getan. Aber gerne noch mal (ursprünglich war es wesentlich länger, aber da es nie was fand, habe ich mich Fehlersuche betrieben und fand heraus, dass IKEA der Schuldige ist.
Also
Code:
[URL="http://localhost/phpmyadmin/url.php?url=http%3A%2F%2Fdev.mysql.com%2Fdoc%2Frefman%2F5.1%2Fen%2Fselect.html&token=1a6da247a7667f8f65bc09d9fa31a04b"]SELECT[/URL]  * 
FROM  `value` 
WHERE  `name`  = 'IKEA'
LIMIT 0 , 30
@Fipsi16: Das funktioniert auch nicht. Das dumme ist ja, dass es in einer anderen Tabelle, wo ich diese Daten von Hand eingegeben habe, funktioniert.

Tante EditH: Ok, Fehler gefunden. Anscheinend wurde beim Export keine Leerzeile angefügt aber ein Absatz! Dieser wird von phpMyAdmin nicht angezeigt, nur beim Bearbeiten. Jetzt muss ich nur noch rausfinden, wie ich den beim Export rauskriege. Denn dort kommt er erst rein.
 
Zuletzt bearbeitet:
Wie jetzt "FROM `value`" ? Da muss FROM tabellen_name stehen. Deine Tabelle heißt doch nicht "value" oder?

SELECT * FROM tabellen_name WHERE spalten_name = 'IKEA'

Tabelle und Spalten Name gehören nicht in ''
 
Sieh mal richtig hin. Das ist kein Hochkomma, sondern ein Accent, was in MySQL als Spaltentrenner dient.
 
Ichthys schrieb:
Tante EditH: Ok, Fehler gefunden. Anscheinend wurde beim Export keine Leerzeile angefügt aber ein Absatz! Dieser wird von phpMyAdmin nicht angezeigt, nur beim Bearbeiten. Jetzt muss ich nur noch rausfinden, wie ich den beim Export rauskriege. Denn dort kommt er erst rein.

wie exportierst du den?

Ich exportiere regelmäßig größere Excel-Dateien nach mySQL? Habs schon versucht direkt die Excel-Tabelle zu importieren - diese Möglichkeit gibt es in phpMyAdmin. Brachte mir aber immer irgendwelche Fehler. Mache das mittlerweile so:

Excel-Blatt als CSV speichern
Mit notepad++ öffnen
Zeichencodierung umstellen (nutze in mySQL Unicode)
Zeilen die zuviel sind entfernen (es sind immer zwischen 1 und 10 Zeilen enthalten die nur ;;;;;; haben)
speichern
phpMyAdmin -> importieren

=> Fertig.
Fehlerquote seitdem ... 0 (außer es trat mal wieder ein Layer8-Problem auf *G* aber da kann weder Excel, Notepad++ noch mySQL/phpMyAdmin was für - das Problem sitzt einfach vorm Monitor :) )
 
Ja, das trifft in 99,9% aller Fälle zu. :D
zu den Fragen: Die Tabelle heißt tatsächlich Value, es dürfte ja kein geschützter Name sein.
Ich habe mir ein PHP-Skript geschrieben, welches die Daten einliest, da ich gleich normalisiere.
@Magnus1986: die Akzente wurden übrigens von phpMyAdmin hinzugefügt. Wenn ich selbst schreibe, mache ich es auch immer ohne Akzente.
 
filtere beim Export deine Strings, schmeiß alle \r und \n, die am Ende des Strings stehen, raus. Da die Entwickler von PHP clever waren: $string = trim($string);

Wenn du die Werte innerhalb der DB "nachbehandeln" willst wirds kniffliger. Da darfste dir ne Kette von Schleifen schreiben, die Tabelle für Tabelle, Zeile für Zeile und dann jeweils noch Zelle für Zelle durchgeht, trim() durchlaufen lässt und die sauberen Werte zurückschreibt.
 
Danke für den Hinweis. Den Befehl kannte ich noch nicht. :)
 

Ähnliche Themen

Zurück
Oben