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

PDOstatement(MySQL):値0をbit(1)フィールドに挿入すると、1がテーブルに書き込まれます

    BIT列はmysqlのバイナリ型であり(数値型として文書化されていますが、正確には正しくありません)、クライアントライブラリの問題(PDOの問題で証明されています)のために避けることをお勧めします。列のタイプをTINYINT(1)に変更すると、多くの問題を回避できます。

    もちろん、TINYINT(1)はすべての行でフルバイトのストレージを消費しますが、mysqlのドキュメントによるとBIT(1)も同様に消費します。

    差出人: http://dev.mysql.com/doc /refman/5.1/en/storage-requirements.html

    ビットストレージ要件は次のとおりです。約(M + 7)/ 8バイト。これは、BIT(M)列もバイトアラインされていることを示しています。

    また、私はこれを見つけました: https://bugs.php.net/bug.php? id =50757

    したがって、次のコードが期待どおりに機能するかどうかを確認できます。

    $pdo = new PDO("connection string etc") ;
    $statement = $pdo->prepare('INSERT INTO `test` (SomeText,TestBool) VALUES (:someText,:testBool)') ;
    $statement->bindValue(':someText', "TEST");
    $statement->bindValue(':testBool', 0, PDO::PARAM_INT);
    $statement->execute();
    

    PARAM_INTとは異なるタイプのヒントを試すこともできますが、それでも機能させる場合は、TINYINTに変更することをお勧めします。



    1. ORA-04091:表xx_xxが変更されています。トリガー/関数がそれを認識しない可能性があります

    2. MySQLに保存されているフロート値が台無しになり続ける

    3. OracleTextはNVARCHAR2では機能しません。他に何が利用できない可能性がありますか?

    4. PythonリストをPostgresテーブルに挿入する方法