sql >> データベース >  >> RDS >> Mysql

mysql:「文字列」を0と比較するとtrueになるのはなぜですか?

    MySQLは自動的に文字列を数値にキャストします:

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

    数字で始まらない文字列は0と評価されます:

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

    もちろん、ある文字列を別の文字列と比較しようとしても、変換は行われません:

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

    ただし、たとえば+演算子を使用して変換を強制することができます:

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

    文字列'0string'と数値0を合計しているため、最後のクエリはTRUEを返します。したがって、文字列は数値に変換する必要があり、SELECT 0 + 0 = 'string'になります。 次に、文字列'string'は、0と比較される前に数値に変換され、SELECT 0 = 0になります。 これはTRUEです。

    これも機能します:

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

    数値に変換された文字列の合計(この場合は1 + 2)を返します。



    1. SQL Serverの文字列からHTMLタグを取り除く方法は?

    2. ClusterControl1.8.2でPostgreSQL用のPgBouncer接続プールを使用する

    3. ユーザー'root'@'localhost'のアクセスが拒否されました(パスワードを使用:YES)-権限がありませんか?

    4. 分散トランザクションを開始できません