[前][次][番号順一覧][スレッド一覧]

mysql:15278

From: SAKAI Kei <SAKAI Kei <sak2@xxxxxxxxxx>>
Date: Thu, 22 Apr 2010 12:42:49 +0900
Subject: [mysql 15278] Re: MySQL5.1DATE型項目の制限について

坂井です

>>鈴木さん
  
 「エラーになる」のが 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>


[前][次][番号順一覧][スレッド一覧]

     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]