MySQLでdatetime型をDATE_FORMATすると文字コードが変わる?

Web App

datetime型のカラムに日付データが入力してあります。

2020-10-15 16:30:00

これを

DATE_FORMAT(class_start,'%Y-%m')

として取り出していました。

2020-10

何の問題もありませんでした(過去形)。

この値を元にグループ化し集計などしていたら…出ました

Fatal error: Uncaught PDOException: SQLSTATE[HY000]: General error: 1267 Illegal mix of collations (utf8mb4_general_ci,COERCIBLE) and (utf8mb4_unicode_ci,COERCIBLE)

文字コードが mix ?

可視化するためビューを作成し構造を見てみた。

なんで変わるん…

このエラーを回避するためには文字コードを指定してあげる必要がありました。

CONVERT(DATE_FORMAT(class_start,'%Y-%m') using utf8)

元の文字コードに戻った。

うーん…そういう仕様なんだろうか

sql上では発覚せず(エラーにならず)、phpから弄るとエラーで動かないという面倒な問題でした。

コメント