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

MySQL整数フィールドマッチング文字列で何が起こっていますか?

    文字列は、数値と比較すると常に0に変換されます(もちろん、数値を含む文字列+文字列は数値に変換されますが、これは適切な方法ではありません)

    mysql> SELECT 'Yes' + 0;
    +-----------+
    | 'Yes' + 0 |
    +-----------+
    |         0 |
    +-----------+
    1 row in set, 1 warning (0.00 sec)
    
    mysql> show warnings;
    +---------+------+-----------------------------------------+
    | Level   | Code | Message                                 |
    +---------+------+-----------------------------------------+
    | Warning | 1292 | Truncated incorrect DOUBLE value: 'Yes' |
    +---------+------+-----------------------------------------+
    

    バイナリ値(Yes/NoまたはTrue/False)または小さい値を設定する場合は、ENUM 良い選択です。小さなディスク容量が必要で、意味のある文字列を使用できます。

    mysql> CREATE TABLE enum_test(a ENUM('Yes', 'No'));
    Query OK, 0 rows affected (0.00 sec)
    
    mysql> insert into enum_test values('Yes'), ('No'), ('Invalid');
    Query OK, 3 rows affected, 1 warning (0.00 sec)
    Records: 3  Duplicates: 0  Warnings: 1
    
    mysql> show warnings;
    +---------+------+----------------------------------------+
    | Level   | Code | Message                                |
    +---------+------+----------------------------------------+
    | Warning | 1265 | Data truncated for column 'a' at row 3 |
    +---------+------+----------------------------------------+
    1 row in set (0.00 sec)
    
    mysql> select * from enum_test where a = 'Yes';
    +------+
    | a    |
    +------+
    | Yes  |
    +------+
    1 row in set (0.00 sec)
    
    mysql> select * from enum_test where a = 'No';
    +------+
    | a    |
    +------+
    | No   |
    +------+
    1 row in set (0.00 sec)
    



    1. mySQLで列名を動的に選択する方法

    2. SQL更新クエリの集計関数?

    3. SQL Server(T-SQL)でデータベースメールアカウントを更新する

    4. デフォルトのページネーションを上書きせずにカスタムクエリをページネーションできますか?