アフィリエイト広告を利用しています

2019年09月08日

sql_mode、STRICT_ALL_TABLES、STRICT_TRANS_TABLES

MySQL 5.6でint型カラムに 空文字 '' をインサートしようとしたら


insert into tablename (columnname) values ('');


エラーになり、データを登録できなかった。

MySQLを5.1から5.6にバージョンアップして気付いた現象。

調べて見ると5.5から5.6へのバージョンアップで

Integerタイプへのデータ登録についての設定が変更されたらしい。


my.cnfにsql_modeという設定項目が追加され、これによって

空文字 '' の取り扱いが変る。


sql_mode=STRICT_TRANS_TABLES

または、

sql_mode=STRICT_ALL_TABLES

のとき、空文字の登録はエラーとなり、

sql_mode=””

とすると、integer項目に空文字を登録しようとすると 0 が登録された。

結局


sql_mode=””

とはせずに、空文字 ’’ を登録しようとしているSQL文を修正した。


insert into tablename (columnname) values (0);



その後


mariadbでも同様の現象に遭遇したので、今度はmy.cnfを修正しようとした。

そして、my.cnf ではなく、替わりに /etc/my.cnf.d の mariadb-server.cnf に sql_mode=''を追加した。
 [mariadb]
 sql_mode=''









【このカテゴリーの最新記事】

posted by db-engineer at 00:00 | Comment(0) | Mysql

この記事へのコメント
コメントを書く

お名前:

メールアドレス:


ホームページアドレス:

コメント:

※ブログオーナーが承認したコメントのみ表示されます。

検索
最新記事
カテゴリーアーカイブ
プロフィール
db-engineerさんの画像
db-engineer
プロフィール
タグクラウド