Mysql
 sql >> Baza danych >  >> RDS >> Mysql

mysql:dlaczego porównanie 'ciągu' do 0 daje prawdę?

MySQL automatycznie rzuca ciąg na liczbę:

SELECT '1string' = 0 AS res; -- res = 0 (false)
SELECT '1string' = 1 AS res; -- res = 1 (true)
SELECT '0string' = 0 AS res; -- res = 1 (true)

a ciąg, który nie zaczyna się od liczby, jest oceniany jako 0:

SELECT 'string' = 0 AS res;  -- res = 1 (true)

Oczywiście, gdy próbujemy porównać ciąg z innym ciągiem, nie ma konwersji:

SELECT '0string' = 'string' AS res; -- res = 0 (false)

ale możemy wymusić konwersję za pomocą np. operatora +:

SELECT '0string' + 0 = 'string' AS res; -- res = 1 (true)

ostatnie zapytanie zwraca TRUE, ponieważ sumujemy ciąg „0ciąg” z liczbą 0, więc ciąg musi zostać przekonwertowany na liczbę, staje się on SELECT 0 + 0 = 'string' a następnie ponownie ciąg 'string' jest konwertowany na liczbę przed porównaniem z 0, a następnie staje się SELECT 0 = 0 co jest PRAWDĄ.

To również zadziała:

SELECT '1abc' + '2ef' AS total; -- total = 1+2 = 3

i zwróci sumę ciągów przekonwertowanych na liczby (1 + 2 w tym przypadku).



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Błąd podczas zmiany nazwy kolumny w MySQL

  2. MySQL:Jak zezwolić na zdalne połączenie z mysql

  3. Łączenie się z MySQL z Androida za pomocą JDBC

  4. Jak dołączyć do trzech stołów według wymownego modelu laravel

  5. Uruchomić zapytanie mySQL jako zadanie cron?