___ answer37507972 ___

Dasselbe Problem tritt auf, wenn eine Zeichenfolge in einen Integer-Typ umgewandelt wird.

%Vor%

Wenn jedoch eine Zahl innerhalb der Zeichenfolge angegeben wird.

%Vor%

Um das Problem zu beheben, verwenden Sie %code% für die Spalte, was auch dazu führt, dass der Textwert die Groß- / Kleinschreibung beachtet.

%Vor%     
___ qstntxt ___

Ich habe eine Tabelle namens %code% , die folgendermaßen aussieht:

Auf dem ich Abfrage wie folgt ausführen:

%Vor%

Diese Abfrage ist nicht sinnvoll, weil %code% column% %code% type ist und ich in meiner Abfrage nach %code% value suche, aber %code% gibt immer noch keine leeren Zeilen zurück. Hier ist welche Abfrage zurückgegeben: Daher enthält %code% row in keiner der zurückgegebenen Zeilen %code% value. Wie kann das möglich sein?

    
___ answer37507859 ___

"männlich" ist 0! Du erhältst also Aufzeichnungen, in denen das Alter 0 ist. Um wirklich zu verstehen, was gerade passiert, tu folgendes:

%Vor%

Ihre dritte Spalte ist 1 für die Datensätze mit dem Alter "0" und "0" für die Datensätze mit einem Alter ungleich null.

    
___ tag123php ___ PHP ist eine weit verbreitete, dynamische, objektorientierte und interpretierte Skriptsprache, die primär für die serverseitige Webentwicklung entwickelt wurde. ___ answer37507775 ___

Versuchen Sie diese einfache Abfrage:

%Vor%

Das scheint keinen Sinn zu ergeben. Die Abfrage wird jedoch ausgeführt und gibt den Wert %code% zurück. Dies liegt an der impliziten Typkonvertierung . Der String-Wert %code% wird in %code% konvertiert und dann zu %code% hinzugefügt. Daher wird %code% zurückgegeben.

Das Gleiche passiert mit Ihrer Anfrage. %code% in %code% konvertiert im Vergleich zu einem Feld vom Typ %code% .

    
___ tag123mysql ___ MySQL ist ein freies, relationales Datenbank-Managementsystem (RDBMS), das die strukturierte Abfragesprache (SQL) verwendet. Verwenden Sie dieses Tag NICHT für andere DBs wie SQL Server, SQLite usw. Dies sind verschiedene DBs, die alle SQL verwenden, um die Daten zu verwalten. ___ answer37508041 ___
  
    

Das Problem hier ist, dass, wenn Sie versuchen, eine Zeichenfolge mit einer Ganzzahlspalte zu vergleichen, der Wert in den Datentyp der Spalte umgewandelt wird. Derselbe Fall wird mit float, big int, tiny int usw. auftreten.

  

Welcher Wert auch immer im Vergleich übergeben wird, wird zuerst von der mysql-Engine für diesen bestimmten Datentyp umgesetzt

Hier ist das Testergebnis der Abfrage, die wenige Werte ausgibt.

%Vor%

%Vor%

Das flt hat eine Spalte vom Typ float.

    
___

8

Ich habe eine Tabelle namens tabela1512823699024883 , die folgendermaßen aussieht:

Auf dem ich Abfrage wie folgt ausführen:

%Vor%

Diese Abfrage ist nicht sinnvoll, weil age column% int type ist und ich in meiner Abfrage nach string value suche, aber MySQL gibt immer noch keine leeren Zeilen zurück. Hier ist welche Abfrage zurückgegeben: Daher enthält age row in keiner der zurückgegebenen Zeilen male value. Wie kann das möglich sein?

    
Ognj3n 29.05.2016, 08:25
quelle

4 Antworten

14

Dasselbe Problem tritt auf, wenn eine Zeichenfolge in einen Integer-Typ umgewandelt wird.

%Vor%

Wenn jedoch eine Zahl innerhalb der Zeichenfolge angegeben wird.

%Vor%

Um das Problem zu beheben, verwenden Sie BINARY für die Spalte, was auch dazu führt, dass der Textwert die Groß- / Kleinschreibung beachtet.

%Vor%     
fyrye 29.05.2016, 08:54
quelle
11

Versuchen Sie diese einfache Abfrage:

%Vor%

Das scheint keinen Sinn zu ergeben. Die Abfrage wird jedoch ausgeführt und gibt den Wert 0 zurück. Dies liegt an der impliziten Typkonvertierung . Der String-Wert 'male' wird in 0 konvertiert und dann zu 0 hinzugefügt. Daher wird 0 zurückgegeben.

Das Gleiche passiert mit Ihrer Anfrage. 'male' in 0 konvertiert im Vergleich zu einem Feld vom Typ int .

    
Giorgos Betsos 29.05.2016 08:29
quelle
3

"männlich" ist 0! Du erhältst also Aufzeichnungen, in denen das Alter 0 ist. Um wirklich zu verstehen, was gerade passiert, tu folgendes:

%Vor%

Ihre dritte Spalte ist 1 für die Datensätze mit dem Alter "0" und "0" für die Datensätze mit einem Alter ungleich null.

    
sherzodr 29.05.2016 08:38
quelle
2
  
    

Das Problem hier ist, dass, wenn Sie versuchen, eine Zeichenfolge mit einer Ganzzahlspalte zu vergleichen, der Wert in den Datentyp der Spalte umgewandelt wird. Derselbe Fall wird mit float, big int, tiny int usw. auftreten.

  

Welcher Wert auch immer im Vergleich übergeben wird, wird zuerst von der mysql-Engine für diesen bestimmten Datentyp umgesetzt

Hier ist das Testergebnis der Abfrage, die wenige Werte ausgibt.

%Vor%

%Vor%

Das flt hat eine Spalte vom Typ float.

    
Pratik Soni 29.05.2016 09:02
quelle

Tags und Links