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

4つより多くの文字を格納するVARCHAR(4)

    これを行っている場合:

    1. オブジェクトを作成またはロードする$o
    2. '12345'を割り当てます 問題のプロパティ/列に移動します。
    3. $oを保存します MySQLに値を'1234'に切り捨てさせます 。
    4. $oのプロパティ/列にアクセスします '12345'を取得します 戻る。

    そうすると、データベースにデータを黙って壊してしまうという問題の1つが発生します。

    保存は成功します。オブジェクトはMySQLがデータを切り捨てたことを認識しないため、'12345'を保持します。 データベースからその列をリロードするのではなく、データの一貫性が失われます。

    MySQLに依存してデータを黙って切り捨てている場合は、おそらくこれを行う必要があります:

    1. オブジェクトを作成/ロードします。
    2. プロパティを更新しました。
    3. オブジェクトを保存します。
    4. オブジェクトへのローカル参照を破棄します。
    5. データベースから新しくロードして、本物のを確実に取得します。 値。

    MySQL内でのサイレントな切り捨てを回避するために、オブジェクトに厳密な検証を追加することをお勧めします。 厳密モード をオンにする この問題も回避できますが、エラー処理とデータ検証をすべて確認して強化する必要があります(これは実際には悪いことではありません)。




    1. SQLiteにGLOB句が必要なのはなぜですか?

    2. タイムトラッカーからカレンダーまでの時間を日ごとに合計する

    3. 単一のクエリで複数のグループを使用する

    4. V$SQLにない最近実行されたSQL