mysql gibt den Booleschen Typ zurückIm ersten Fall direkt zurückselect id='22aa' from mytest where age=202 gibt 1 zurück, was als true gekapselt werden kann select count(*)=1 from mytest where age=202 gibt 1 zurück, was als true gekapselt werden kann select count(*)=0 from mytest where age=202 gibt 0 zurück und kann als false gekapselt werden select count(*)<3 from mytest where age=202 gibt 1 zurück, was als true gekapselt werden kann select count(*)<=1 from mytest where age=202 gibt 1 zurück, was als true gekapselt werden kann select name="aa" from mytest where age=10 Wenn der Name null ist, meldet SQL keinen Fehler und das zurückgegebene Ergebnis ist ebenfalls null. Im zweiten Fall beziehen Sie sich auf den SQL 3-Code und es wird ein Fehler gemeldet. Zusammenfassen: Diese Situation ähnelt der Urteilsbegründung in Java. Es ist nur so, dass in Java = Zuweisung bedeutet, also wird == zur Beurteilung verwendet, während in MySQL set zur Zuweisung verwendet wird und = direkt zur Beurteilung. Im zweiten Fall kann die Rückgabe von 0 oder 1 ebenfalls den Zweck erfüllenselect enable aus mytest, wobei age=202 1 zurückgibt, was als true verpackt werden kann select count(*) aus mytest gibt 4 zurück, was als Boolean-Typ gekapselt werden kann, aber falsch ist select enable from mytest where age=201 gibt null zurück. Kann nicht als Boolescher Typ gekapselt werden. Der Code meldet direkt einen Fehler. select id from mytest where age=202 gibt „22aa“ zurück. Kann als Boolescher Typ gekapselt werden, ist aber falsch. select id from mytest where age=202 gibt 'true' zurück. Kann als Boolescher Typ gekapselt werden, ist aber wahr. select id from mytest where age=202 gibt 'false' zurück, was als Boolean-Typ gekapselt werden kann, false //Sonderfall select * from mytest Fehler Es wurde erwartet, dass selectOne() ein Ergebnis (oder null) zurückgibt, aber gefunden: 4 select * from mytest where age=202 gibt einen Datensatz false 2019-08-28 202 15 1 zurück, der als false gekapselt werden kann select * from mytest where age=202 gibt einen Datensatz true 2019-08-28 202 15 1 zurück, der als true gekapselt werden kann select * from mytest where age=202 gibt einen Datensatz aaaa2019-08-28 202 15 1 zurück, der als false gekapselt werden kann Zusammenfassen: Mybatis konvertiert basierend auf der Anzahl der abgefragten Datensätze (1=wahr, 0=falsch) Zu beachtende Punkte: Wenn mehrere Datensätze (größer als 1) gefunden werden, aber „false“ zurückgegeben wird, ist dies genau das Gegenteil von dem, was wir erwarten. Hier können Sie andere Methoden zur Beurteilung verwenden, indem Sie die Anzahl der Datensätze zurückgeben, oder Sie können sicherstellen, dass die Datensätze in der Datenbank eindeutig sind. Du kannst zur Lösung auch direkt den ersten Fall nutzen. Gemäß dem Test der SQL-Anweisungen 4, 5 und 6 kann die Zeichenfolge, wenn sie „true“ ist, als wahr gekapselt werden, wenn sie „false“ ist, kann sie als falsch gekapselt werden und die Zeichenfolgen in anderen Situationen sind alle falsch. (Das ist nur eine Vermutung, nicht genau. Sie müssen auf der offiziellen MySQL-Website nachschauen. Wenn das zurückgegebene Feld ein String ist, welche Regeln werden dann verwendet, um es in einen Booleschen Wert umzuwandeln? Ich vermute, es ähnelt der Methode zum Umwandeln von Strings in Boolesche Werte in Java: Boolean.valueOf("aaa") //false, die Methode lautet wie folgt)
Fallstricke bei MySQL-Booleschen TypenIn MySQL ist Boolean lediglich ein Alias für tinyint(1), was bedeutet, dass es in MySQL keinen echten Bool-Typ gibt. SQLAlchemy hat dies jedoch beim Generieren von SQL nicht erkannt, was zu einem Problem führte. Wenn der Typ bool als Abfragebedingung verwendet wird, kann der Index nicht verwendet werden, was zu einem Tabellenscan führt: > SELECT COUNT(*) FROM Nachricht, wobei Nachricht.is_national = 1 AND Nachricht.aktualisiert_at > '2020-01-01 00:00:00' AND Nachricht.gelöscht_at IS NULL; +----------+ | ANZAHL(*) | +----------+ | 0 | +----------+ 1 Reihe im Set Zeit: 0,018 s > SELECT COUNT(*) FROM message, WHERE message.is_national ist wahr UND message.updated_at > '2020-01-01 00:00:00' UND message.deleted_at IST NULL; +----------+ | ANZAHL(*) | +----------+ | 0 | +----------+ 1 Reihe im Set Zeit: 2.162s Achten Sie auf die Zeit der ersten und zweiten Zeile. Es ist offensichtlich, dass die zweite Zeile den Index nicht verwendet. Werfen wir einen Blick auf die Ergebnisse von EXPLAIN, um die Antwort zu sehen: > EXPLAIN SELECT COUNT(*) FROM message WHERE message.is_national = 1 AND message.updated_at > '2020-01-01 00:00:00' AND message.de leted_at IST NULL; | ID | Auswahltyp | Tabelle | Typ | mögliche Schlüssel | Schlüssel | Schlüssellänge | Ref. | Zeilen | Extra | | 1 | EINFACH | Nachricht | ref | ix_message_updated_at,idx_updated_at_is_national,ix_message_is_national | ix_message_is_national | 1 | const | 1 | Verwenden von where | > EXPLAIN SELECT COUNT(*) FROM message WHERE message.is_national is true AND message.updated_at > '2020-01-01 00:00:00' AND messageag e.deleted_at IST NULL; | ID | Auswahltyp | Tabelle | Typ | mögliche Schlüssel | Schlüssel | Schlüssellänge | Ref. | Zeilen | Extra | | 1 | SIMPLE | Nachricht | ALLE | ix_message_updated_at,idx_updated_at_is_national | <null> | <null> | <null> | eine sehr große Zahl | Mit was bezüglich | Dazu möchte ich nur sagen: Das ist Abzocke! Das Obige ist meine persönliche Erfahrung. Ich hoffe, es kann Ihnen als Referenz dienen. Ich hoffe auch, dass Sie 123WORDPRESS.COM unterstützen werden. Das könnte Sie auch interessieren:
|
>>: Benutzererfahrung bei der Neugestaltung der Portal-Website
Inhaltsverzeichnis 1. Requisiten/$emit Einführung...
Inhaltsverzeichnis Vorwort 1. Anwendungskomponent...
1. Fügen Sie das Plug-In hinzu und fügen Sie die ...
Vorwort Projektanforderungen: Installieren Sie da...
Installieren und konfigurieren Sie das MySql-Date...
In letzter Zeit besteht eine wachsende Nachfrage ...
1. Welche drei Formate? Dies sind: gif, jpg und pn...
Hyperlink Hyperlinks sind die am häufigsten verwen...
Inhaltsverzeichnis Kurze Einleitung Intervall fes...
CEP – Komplexe Ereignisverarbeitung. Die Zahlung ...
Inhaltsverzeichnis 1 Einleitung 2 Trigger-Einführ...
Inhaltsverzeichnis Hauptsächlich verwendete Postm...
Frage: <input type="hidden" name=&qu...
1 Hintergrund Vor kurzem sind im Online-Geschäft ...
Inhaltsverzeichnis 1. Einleitung 2. RC- und RR-Is...