2016-04-07 13 views
3

Ich habe eine Tabelle Typen, die die folgenden Spalten enthält: ID, Name, Typ. Die Tabelle ist mit etwa 300 Zeilen gefüllt. Einer der Reihen:MySQL einfache Abfrage gibt Nullzeilen zurück

ID Name Type 
------------------ 
1  BMW  S 1000 RR 

Die folgende Abfrage gibt diese Zeile:

SELECT * FROM Types WHERE Name = 'BMW' 

jedoch die folgende Abfrage gibt nichts:

SELECT * FROM Types WHERE Type = 'S 1000 RR' 

Es sind keine zusätzlichen Leerzeichen in der Art, und die Datentypen Name und Typ sind genau gleich (varchar 255, utf8_unicode_ci). Was kann das möglicherweise verursachen?

Ich benutze MySQL, InnoDB. Mit phpMyAdmin bekomme ich genau die gleichen Ergebnisse, so ist kein Tippfehler in Spaltennamen ...

+0

Ich finde es sehr überraschend, dass die Abfrage funktioniert in jedem Fall. 'types' und' type' sind beide MySQL-reservierte Wörter und hätten eigentlich nicht ohne Backtick-Escaping funktionieren sollen. – apokryfos

+3

@apokryfos das ist nicht korrekt. Niether von ihnen ist Reserviert und keiner von ihnen erfordert Backticks –

+0

@ HankyPanky [diese Seite] (https://dev.mysql.com/doc/refman/5.7/en/keywords.html) scheint sonst zu behaupten – apokryfos

Antwort

3

zu trimmen habe ich das Problem gefunden: zu fülle die Tabelle Ich lese eine Textdatei pro Zeile. Das Newline-Zeichen war das Problem, es ist in der Browse-Tabellenansicht von phpMyAdmin unsichtbar, aber ich sah es beim Bearbeiten einer einzelnen Zeile.

Die folgende Abfrage festgelegt mein Problem:

UPDATE Types SET Type = REPLACE(REPLACE(Type, '\r', ''), '\n', ''); 

in How to remove new line characters from data rows in mysql? gefunden

Vielen Dank allen für Ihre Kommentare.

+1

Ich denke, das ist besser, wenn Sie es als gelöst markieren, damit der nächste Typ, der hier mit dem gleichen Problem kommt, auch geholfen werden kann :-) – rafaelcpalmeida

+0

Kann das nicht tun, bevor 2 Tage vorbei sind, wollte tun es sofort ... Wird es so schnell wie möglich tun. – Inigo

+1

Sehr Danke, es funktioniert wie Charme. Ich habe in den letzten 2 Wochen um dieses Problem gekämpft. Vielen Dank. +1 – Venkat

0

Ich bin sicher, dass aufgrund ist

Versuchen Sie, diese

SELECT * FROM Types WHERE TRIM(Type) = 'S 1000 RR' 
+0

Leider keine Ergebnisse – Inigo

0

Es ist nicht so. Ihre Tabellennamen und Spaltennamen sind alle gut und die Abfrage auch korrekt o/p geben: gehen Tabellentypen CREATE ( ID int, Namen varchar (3), Typ varchar (9));

gehen
INSERT INTO Typen (ID, Name, Typ) VALUES (1, 'BMW', 'S 1000 RR')

SELECT * FROM Types WHERE Type = 'S 1000 RR' 
+0

Es war ein Newline-Charakter am Ende, dass es vermasselt. Siehe meine Antwort für Details. – Inigo

+0

okok..ich war eigentlich in ssms tryin –

Verwandte Themen