よくプログラム上からRDB(リレーショナルデータベース)に接続することがあります。その中でもMySQLとMariaDBは近しい関係にあり、同じドライバで動かすことがよくあります。DBの違い = ドライバの違い、という論理でプログラムが組まれている場合、ソースコード側から接続先がMySQLかMariaDBか識別するための関数が用意されていない場合があります。この記事ではそういった時に用いるクエリを紹介します。
方針としては同じSQL文を発行してその結果から識別を行います。これを実現する方法は少なくとも二つあり、一つは情報関数の VERSION() を用いる方法です。
MySQL :: MySQL 5.6 リファレンスマニュアル :: 12.14 情報関数#VERSION
VERSION – MariaDB Knowledge Base
これを使うと次の様にMariaDB側には”MariaDB”の文字列が含まれたバージョン名がでます。これを元に識別が可能です。
# MySQL mysql> SELECT VERSION(); -> '5.6.23-standard' # MariaDB SELECT VERSION(); +----------------+ | VERSION() | +----------------+ | 10.4.7-MariaDB | +----------------+
同様にバージョンについてのコメントを見ることでも識別が可能です。こちらはMySQL側も自分はMySQLである、と文字列で示されています。
# MySQL mysql> SHOW VARIABLES LIKE "version_comment"; -> 'MySQL Community Server (GPL)' # MariaDB SHOW VARIABLES LIKE "version_comment"; +---------------------------------+ | Value | +---------------------------------+ | mariadb.org binary distribution | +---------------------------------+