MySQL tự động chuyển một chuỗi thành một số:
SELECT '1string' = 0 AS res; -- res = 0 (false)
SELECT '1string' = 1 AS res; -- res = 1 (true)
SELECT '0string' = 0 AS res; -- res = 1 (true)
và một chuỗi không bắt đầu bằng số được đánh giá là 0:
SELECT 'string' = 0 AS res; -- res = 1 (true)
Tất nhiên, khi chúng tôi cố gắng so sánh một chuỗi với một chuỗi khác, sẽ không có chuyển đổi:
SELECT '0string' = 'string' AS res; -- res = 0 (false)
nhưng chúng tôi có thể buộc chuyển đổi bằng cách sử dụng, ví dụ:+ toán tử:
SELECT '0string' + 0 = 'string' AS res; -- res = 1 (true)
truy vấn cuối cùng trả về TRUE bởi vì chúng tôi ar tổng một chuỗi '0string' với một số 0, do đó, chuỗi phải được chuyển đổi thành một số, nó sẽ trở thành SELECT 0 + 0 = 'string'
và sau đó một lần nữa chuỗi 'string' được chuyển đổi thành một số trước khi được so sánh với 0, và sau đó nó trở thành SELECT 0 = 0
là ĐÚNG.
Điều này cũng sẽ hoạt động:
SELECT '1abc' + '2ef' AS total; -- total = 1+2 = 3
và sẽ trả về tổng của các chuỗi được chuyển đổi thành số (1 + 2 trong trường hợp này).