mysql:15280
From: KDDI 鈴木 正信 <KDDI 鈴木 正信 <masanobu@xxxxxxxxxx>>
Date: Thu, 22 Apr 2010 12:57:29 +0900
Subject: [mysql 15280] Re: MySQL5.1DATE型項目の制限について
坂井さん 鈴木です 申し訳有りません。 私が誤った返信をしたばかりに・・・ 更に深堀りを強いてしまいました 先程 mysql> select @@sql_mode; の結果が空白だったと返信しましたが、 慌てた私の誤りで旧バージョンのMySQLで実行した結果でした。 新バージョンのMySQL5.1.45(64)では、ちゃんと STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION と表示され STRICT_TRANS_TABLESを外す事で 問題無く空白の代入が可能となりました 本当にありがとうございました >坂井です > >>>鈴木さん > > 「エラーになる」のが MySQL のエラーだとしたら、STRICTモードに > なっているのだと思いますが、考えられるのとしては以下2つあります。 > > 1)その「WEBベースのシステム」内で接続時にSTRICTモードを指定 > している(前のメールを書いた時にはサーバオプションの設定で > STRICT_ALL_TABLES していると考えていましたが、このオプショ > ンは接続ごとにも指定可能なのです) > そのシステムの接続ルーチンを通過させて select @@sql_mode > の実行させるようなサンプルを作ることができれば、それで > 確認してみると分かります。 > > 2)その「WEBベースのシステム」内で、MySQLからWarningが帰って > 来た場合でも「エラー」として扱っている > (この場合、warningは出つつも 0000-00-00 なデータは登録さ > れるので、""を登録しようとして「エラー」が出た後でのテー > ブルへの登録状況確認すれば切り分けができます) > > > 手前味噌ですが値の切り捨てやsql_mode については以前以下の > エントリを書いたので、参考になれば幸いです。 > http://d.hatena.ne.jp/sakaik/20100303/mysqlmode > > それから、 > >> ストリクトモード時に無効なデータを入れたい場合は、 >> INSERT IGNOREまたはUPDATE IGNOREを指定する。 > > との事ですが、今回(今の時点での確認内容では) > ストリクトモードで動作しているという確認が取れていないので > 前提条件が合わない「結果オーライ」になっちゃいます。 > 「INSERT IGNORE でうまく行ったから、きっとストリクトモード > で動いているのだろう」という推測はできますが:-) > 上位 1) の方法などで「ストリクトモードである」ことの確認が > 取れれば、 a)そのモードをやめる(理由があって指定しているの > でしょうから難しいかもしれませんが) b) INSERT IGNORE にする > c) 日付に "" を与えるのをやめる > などの対応が考えられますね。 > > >thank you >On Thu, 22 Apr 2010 12:14:06 +0900 >KDDI 鈴木 正信 <masanobu@xxxxxxxxxx> wrote: >> >> 坂井さん >> >> 鈴木です >> 早速のご教示ありがとうございます。 >> SQL_MODEって初めて知り勉強になりました。 >> >> すぐに試したのですが結果は↓と同じ空欄表示でした。 >> >> >mysql> select @@sql_mode; >> >+------------+ >> >| @@sql_mode | >> >+------------+ >> >| | >> >+------------+ >> >> SQL_MODEを手懸りにNETを検索すると、 >> http://www.hirohama.biz/mysql/2007/06/22-100644.html >> ストリクトモード時に無効なデータを入れたい場合は、 >> INSERT IGNOREまたはUPDATE IGNOREを指定する。 >> >> という記述があり試して見るとうまく行きました。 >> これなら改修も小規模で済みそうです。(嬉) >> >> 今回の件は、これがベターな解でしょうか? >> もっと簡単な方法があれば引き続き皆様の >> お知恵を頂ければ有り難いです。 >> >> >> >坂井です >> > >> > 鈴木さん、こんにちは。 >> > 5.1でも 日付型への "" は truncate されて 0000-00-00 として >> > 登録されると思いますが(warning は出る)、エラーになるという >> > ことで、何かSQLモードを設定されていませんか? >> > SELECT @@SQL_MODE; で確認可能です。 >> > SQL_MODE として STRICT_ALL_TABLES が指定されていると warning >> > ではなくエラーになります。 >> > >> >実行サンプル >> >---- >> >mysql> create table a (id int, dt date); >> >mysql> insert into a values (1, "0000-00-00"); >> > >> >mysql> insert into a values (2, ""); >> >Query OK, 1 row affected, 1 warning (0.00 sec) >> > >> >mysql> show warnings; >> >+---------+------+-----------------------------------------+ >> >| Level | Code | Message | >> >+---------+------+-----------------------------------------+ >> >| Warning | 1265 | Data truncated for column 'dt' at row 1 | >> >+---------+------+-----------------------------------------+ >> > >> >mysql> select * from a; >> >+------+------------+ >> >| id | dt | >> >+------+------------+ >> >| 1 | 0000-00-00 | >> >| 2 | 0000-00-00 | >> >+------+------------+ >> > >> > >> >mysql> select @@sql_mode; >> >+------------+ >> >| @@sql_mode | >> >+------------+ >> >| | >> >+------------+ >> > >> >mysql> set sql_mode='STRICT_ALL_TABLES'; >> > >> >mysql> insert into a values (3, ""); >> >ERROR 1292 (22007): Incorrect date value: '' for column 'dt' at row 1 >> > >> >------ >> > >> >Thank you >> > >> >On Thu, 22 Apr 2010 11:12:04 +0900 >> >KDDI 鈴木 正信 <masanobu@xxxxxxxxxx> wrote: >> >> >> >> こんにちは 鈴木と申します >> >> >> >> Windows版 MySQL4.1.7(32) で動かしているWEBベースのシステムを >> >> Windows版 MySQL5.1.45(64) に載せ変える為のTEST作業を行っていますが >> >> >> >> MySQL4.1.7では許容されていた DATE型項目への >> >> 空白の代入が、MySQL5.1.45ではエラーになります >> >> (null や '0000-00-00' はOK) >> >> >> >> 空白を'0000-00-00'に変換するとなると >> >> 改修規模が膨れ上がるので、うろたえています・・・ >> >> 空白の代入を許す方法は無いものでしょうか? >> >> >> >> 何かご存知の方に解決の糸口をアドバイス頂ければ >> >> と思い投稿致しました。何卒宜しくお願い致します。 >> > >> >-- >> >SAKAI Kei <sak2@xxxxxxxxxx> >> > >> > >> > >> >> 0----+----1----+----2----+----3----+----4----+----5----+----6----+----7----# >> KDDI ブロードバンド・コンシューマ業務推進部 >> 総務管理G >> 鈴木 正信 >> au 080-5072-9414 >> mailto:masanobu@xxxxxxxxxx >> ―――――――――――――――――――――――― >> ******************************************************* >> 【注意】この電子メールには、KDDI株式会社の機密情報が >> 含まれている場合が有ります。 >> 正式なメール受信者で無い場合は、メールの複製、再配信 >> または情報の使用を固く禁じております。 >> エラー、手違いでこのメールを受け取られましたら、削除 >> を行い配信者にご連絡をお願い致します。 >> ******************************************************* > >-- >SAKAI Kei <sak2@xxxxxxxxxx> > > > 0----+----1----+----2----+----3----+----4----+----5----+----6----+----7----# KDDI ブロードバンド・コンシューマ業務推進部 総務管理G 鈴木 正信 au 080-5072-9414 mailto:masanobu@xxxxxxxxxx ―――――――――――――――――――――――― ******************************************************* 【注意】この電子メールには、KDDI株式会社の機密情報が 含まれている場合が有ります。 正式なメール受信者で無い場合は、メールの複製、再配信 または情報の使用を固く禁じております。 エラー、手違いでこのメールを受け取られましたら、削除 を行い配信者にご連絡をお願い致します。 *******************************************************
15271 2010-04-22 11:12 [KDDI 鈴木 正信 <mas] MySQL5.1 DATE型項目の制限について 15272 2010-04-22 11:28 ┣[SAKAI Kei <sak2@xxxx] 15276 2010-04-22 12:14 ┃┗[KDDI 鈴木 正信 <mas] 15278 2010-04-22 12:42 ┃ ┗[SAKAI Kei <sak2@xxxx] -> 15280 2010-04-22 12:57 ┃ ┗[KDDI 鈴木 正信 <mas] 15274 2010-04-22 11:40 ┣[Nakase Hiroaki <h_na] 15275 2010-04-22 11:51 ┃┗["Watanabe Tomoyuki" ] 15279 2010-04-22 12:47 ┃ ┗[KDDI 鈴木 正信 <mas] 15281 2010-04-22 12:58 ┃ ┗[SAKAI Kei <sak2@xxxx] 15359 2010-07-13 08:48 ┗[KDDI 鈴木 正信 <mas] MySQL5.1 mysqldumpのエラーについて 15360 2010-07-13 11:09 ┣[Mikiya Okuno <mikiya] 15362 2010-07-13 14:22 ┃┗[KDDI 鈴木 正信 <mas] @ 15361 2010-07-13 11:11 ┗[らっちょ らっちょ <z]