操作
Task(タスク) #4033
未完了MySQLのStrict Modeを有効にした場合に生じる問題を調査
開始日:
2017-02-16
期日:
進捗率:
0%
予定工数:
(合計: 0:00時間)
説明
MySQL の sql_mode を厳格にした場合に生じる問題を調査する。
具体的には MySQL 5.7 から sql_mode のデフォルトが ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
となるため、この設定で問題が生じる箇所を探す。
過去には #3543 で Strict Mode における問題を修正したことがあった。
使用する環境¶
MySQL 5.7.15:
mysql> SELECT VERSION() \G *************************** 1. row *************************** VERSION(): 5.7.15-1 1 row in set (0.00 sec) mysql> SELECT @@sql_mode \G *************************** 1. row *************************** @@sql_mode: ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION 1 row in set (0.00 sec)
PHP 5.6.26:
$ /usr/bin/php -v PHP 5.6.26-1 (cli) Copyright (c) 1997-2016 The PHP Group Zend Engine v2.6.0, Copyright (c) 1998-2016 Zend Technologies with Zend OPcache v7.0.6-dev, Copyright (c) 1999-2016, by Zend Technologies
Youichi Kimura さんが約8年前に更新
ユーザー画面および管理画面に影響するエラー¶
- GROUP BY で指定していないカラムを SELECT で射影している
- [#4150] opAshiatoPlugin: lib/model/doctrine/PluginAshiatoTable.class.php#L26
- [#4150] opAshiatoPlugin: lib/model/doctrine/PluginAshiatoTable.class.php#L39-L40
- [#4151] opDiaryPlugin: lib/model/doctrine/PluginDiaryCommentUpdateTable.class.php#L62
- [#4152] opRankingPlugin: lib/opRankingPlugin.php#L22
- [#4153] opRankingPlugin: lib/opRankingPlugin.php#L69
- [#4154] opRankingPlugin: lib/opRankingPlugin.php#L108
- [#4155] opRankingPlugin: lib/opRankingPlugin.php#L164
- [#4156] opWebAPIPlugin: lib/api/opAPICommunity.class.php#L157
- [#4157] deleted_message.message_id, deleted_message.message_send_list_id (NOT NULL制約あり) に値が入っていない
- opMessagePlugin: lib/model/doctrine/PluginDeletedMessageTable.class.php#L121
- 受信者側から削除すると message_id が、送信者側から削除すると message_send_list_id が空となり INSERT 時にエラーになる。ゴミ箱からの復元時に、message_id, message_send_list_id のどちらが 0 であるか判定している箇所があるため、おそらく NOT NULL 制約を付与しているスキーマ側の誤り
- [#4158] 管理画面のプロフィール項目設定でプリセットのプロフィール項目を追加すると、caption が空の profile_translation を INSERT しようとしてエラーになる
テスト用の fixture で発生しているエラー¶
- [#4159] member_profile.value_datetime に空文字列を入れている
- [#4159] o_auth_member_token.key_string に 16 文字を越える文字列を入れている
- [#4160] yaml ファイルの記述ミスで community_event.open_date に不正な日付が入る
- PHP タグの
?>
の直後にある改行文字は除去される - opCommunityTopicPlugin: test/fixtures/999_test_data.yml#L360
- opCommunityTopicPlugin: test/fixtures/999_test_data.yml#L370
- PHP タグの
- [#4161] diary.created_at に
2009-03-32 10:00:00
などの不正な日付が入る- opDiaryPlugin: test/fixtures/diaries.yml#L110-L111
- [#4161] diary_comment_update.last_comment_time (NOT NULL 制約あり) に値が入っていない
- opDiaryPlugin: test/fixtures/diaries.yml#L143-L144
- [#4162] deleted_message.message_id (NOT NULL制約あり) に値が入っていない
- opMessagePlugin: plg-message:source:test/fixtures/010_message.yml@6eef6b49#L106
- [#4163] yaml ファイルの記述ミスで blog_rss_cache.date に不正な日付が入る
- 二重引用符で囲われていない日付文字列は UNIX タイムスタンプの数値に変換される
- opFavoritePlugin: test/fixtures/004_import_blog_rss_cache.yml#L14
操作