2020/01/15
今回、クエリ互換性があるとのことでconvというMySQLのクエリ生成ツールをMariaDBへ対応することにした。
MariaDBはMySQLと互換性があるRDBで、MariaDBの公式ページにMySQLのバージョンとの対応が記載されている。
MariaDB versus MySQL - Compatibility
対応する上で、以下の形で作業することにした(MySQL5.6未満はconvではサポートしてないので、MariaDBでもサポートしない)
上記で変更した所、MariaDBの一部バージョンでテストがコケるようになったため修正のため調査した所、タイトルの件があった。
MariaDB 10.2.7以降の information_schema.COLUMNS → COLUMN_DEFAULT
は、クエリ実行時にクオートが必要なデフォルト値の場合はクオートも含むようになった。
MySQLや以前のMariaDBは、リテラルの場合でもクオートは取り除かれていた。
また、 DEFAULT NULL
の場合、以前はCOLUMN_DEFAULT
に値が入っていなかったのに対し、MariaDB10.2.7移行は「NULL」が文字列で入るようになった。
この仕様変更については以下のCOLUMN_DEFAULT
の説明に記載されている。
Information Schema COLUMNS Table
これが原因で、MariaDB10.2.7以降でのみ、カラムのデフォルトNULLなどがクオートされてしまい、クエリ実行時にエラーとなっていた
information_schema.COLUMNS
のCOLUMN_DEFAULT
から、デフォルト値が式かリテラルであるかの判別が出来ないため、リテラルにクオートを付ける形で対応した模様