• EC-CUBEで商品情報が登録できなくなった

    快適な新サーバーが開通したので稼働中のEC-CUBEを新サーバーへ移管しました。そして今日、商品マスタを登録しようとしたところ次のようなエラーが発生し、登録できませんでした。

    システムエラーが発生しました。
    大変お手数ですが、サイト管理者までご連絡ください。

    data/logs/site.log を確認したところ、次のようなエラーメッセージが残されていました。

    INSERT INTO dtb_products(name,status,product_flag,main_list_comment,main_comment,point_rate,deliv_fee,comment1,comment2,comment3,comment4,comment5,comment6,sale_limit,sale_unlimited,deliv_date_id,note,update_date,creator_id,main_list_image,main_image,main_large_image,sub_image1,sub_large_image1,sub_image2,sub_large_image2,sub_image3,sub_large_image3,sub_image4,sub_large_image4,sub_image5,sub_large_image5,file1,file2,sub_title1,sub_comment1,sub_title2,sub_comment2,sub_title3,sub_comment3,sub_title4,sub_comment4,sub_title5,sub_comment5,create_date) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,Now(),?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,Now())
    DB Error: constraint violation
    
    INSERT INTO dtb_products(name,status,product_flag,main_list_comment,main_comment,point_rate,deliv_fee,comment1,comment2,comment3,comment4,comment5,comment6,sale_limit,sale_unlimited,deliv_date_id,note,update_date,creator_id,main_list_image,main_image,main_large_image,sub_image1,sub_large_image1,sub_image2,sub_large_image2,sub_image3,sub_large_image3,sub_image4,sub_large_image4,sub_image5,sub_large_image5,file1,file2,sub_title1,sub_comment1,sub_title2,sub_comment2,sub_title3,sub_comment3,sub_title4,sub_comment4,sub_title5,sub_comment5,create_date) VALUES ('test','2','00000','test','test','11',NULL,NULL,NULL,NULL,NULL,NULL,NULL,'11',NULL,'1',NULL,Now(),'2','07291930_4c51585f108ce.gif','07291931_4c51586425a77.gif',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,Now())
    [nativecode=1048 ** Column 'note' cannot be null]
    

    確認する限りだと  dtb_products テーブルの note という項目にNULLを入れよ

    うとして失敗しているように受け取れます。テーブル定義を調べたところ、note は NULLを許可していないご様子。 結果 mysql にキックされていたようです。

    旧サーバーの dtb_products テーブルを確認いたしましたところ、 note にはNULL ではなく ” (空) データが入ってました。

    たぶん、今まで ” が挿入されようとした時そのまま空データとして挿入されていたところ、データベース接続ライブラリのバージョンアップなどのせいで、” ではなく NULL を挿入するような仕様になってしまっていたのだと思います。

    dtb_products.note にNULLを許可するようにして対応しました。

    mysql> ALTER TABLE dtb_products CHANGE COLUMN note note text DEFAULT NULL;