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

挿入時にストリングを適切な長さに自動的にクリップします

    実際、MySQLはデフォルトで文字列を列幅に切り捨てます。警告を生成しますが、挿入を許可します。

    mysql> create table foo (str varchar(10));
    mysql> insert into foo values ('abcdefghijklmnopqrstuvwxyz');
    Query OK, 1 row affected, 1 warning (0.00 sec)
    mysql> show warnings;
    +---------+------+------------------------------------------+
    | Level   | Code | Message                                  |
    +---------+------+------------------------------------------+
    | Warning | 1265 | Data truncated for column 'str' at row 1 | 
    +---------+------+------------------------------------------+
    mysql> select * from foo;
    +------------+
    | str        |
    +------------+
    | abcdefghij | 
    +------------+
    

    厳密なSQLモードを設定すると、警告がエラーに変わり、挿入が拒否されます。

    コメントを再確認してください。SQLモードはMySQLサーバー構成です。それを引き起こしているのはおそらくPDOではありませんが、一方で、どのクライアントもそのセッションにSQLモードを設定できるため可能です。

    次のステートメントを使用して、現在のグローバル値またはセッションsql_mode値を取得できます。

    SELECT @@GLOBAL.sql_mode;
    SELECT @@SESSION.sql_mode;
    

    デフォルトは空の文字列(モードは設定されていません)である必要があります。 my.cnfでSQLモードを設定できます --sql-modeを含むファイル mysqldのオプション、またはSETを使用する ステートメント。

    更新:MySQL 5.7以降では、デフォルトで厳密モードが設定されています。 https://dev.mysql.com/doc/を参照してくださいrefman / 5.7 / en / sql-mode.html



    1. 真ん中の行に新しい行を挿入するためのMySQL構文?

    2. MATCHAGAINSTがMariaDBでどのように機能するか

    3. 日付から曜日を選択

    4. ビットマップ画像とテキストを保存するためにSQLiteデータベースを実装する方法は?