jfluteです。
mokkouyouさん、詳しい状況ありがとうございます!
ローカルで全く同じ現象ではないですが、ちょっと近い変な現象が発生したので共有します。
-- HANGARとMYSTICが想定されるカラム
create table SEA_PRODUCT(
SEA_PRODUCT_ID INTEGER AUTO_INCREMENT NOT NULL,
HANGAR numeric(15,4) DEFAULT 0 NOT NULL,
MYSTIC numeric(15,4) DEFAULT 0 NOT NULL,
PRIMARY KEY (SEA_PRODUCT_ID)
) COMMENT='SEA商品';
-- HANGARとMYSTICを想定される形でくっつけてみた (STAGE_SHOW)
create view VIEW_SEA_PRODUCT as
select product.SEA_PRODUCT_ID
, product.HANGAR
, product.MYSTIC
, product.HANGAR || '_' || product.MYSTIC as STAGE_SHOW
from SEA_PRODUCT product
information_schema.columns の IS_NULLABLE は...
HANGAR :: NO (NotNull)
MYSTIC :: NO (NotNull)
STAGE_SHOW :: YES (Nullable)
ということで、STAGE_SHOW が NO (NotNull) にならないのでうーむーという感じなのですが...
(ifnullとかもやってみたりしましたが変わらず)
VIEWのSQLで「とある変更」をすると変わりました。
-- select句に相関サブクエリを入れてみた (LATEST_PURCHASE_DATETIME)
create view VIEW_SEA_PRODUCT as
select product.SEA_PRODUCT_ID
, product.HANGAR
, product.MYSTIC
, product.HANGAR || '_' || product.MYSTIC as STAGE_SHOW
, (select max(purchase.PURCHASE_DATETIME)
from PURCHASE purchase
where purchase.PRODUCT_ID = product.SEA_PRODUCT_ID
) as LATEST_PURCHASE_DATETIME
from SEA_PRODUCT product
すると IS_NULLABLE が全部 YES になってしまいました。
単にselect句の項目を増やしただけなのに。既存の項目は変えてないのに。
そしていま、ローカルのMySQL-5.6の方でも試してみたら...
別にサブクエリを入れようが入れまいが HANGAR や MYSTIC などの固定項目は、
IS_NULLABLE が NO のままで変化ないですね。
8.0だとVIEWのカラムのIS_NULLABLE判定がちょっとへんてこりんであることは確実っぽいですね。
(お互い発生してる現象が違うにしても)
引き続き、ちょっと検証してみます。
(今度はAlterCheckの流れでやってみよう)