よくプログラム上から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 |
+---------------------------------+