如何检测连接的数据库是 MariaDB 还是 MySQL?
Posted
技术标签:
【中文标题】如何检测连接的数据库是 MariaDB 还是 MySQL?【英文标题】:How can I detect whether connected database is MariaDB or MySQL? 【发布时间】:2017-09-22 12:06:57 【问题描述】:我的 php 应用程序有要求,包括“mysql 5.7+ 或 MariaDB 10.2+”。我如何判断这些替代方案中的哪一个是满意的?
我知道如何比较版本号,也知道如何从数据库中获取版本号,但我不知道如何确定它是哪种数据库。
我试过了
select version()
这仅返回版本号和服务器操作系统信息,而不是数据库类型。
【问题讨论】:
【参考方案1】:在VARIABLES
中查找aria_block_size
。它的存在几乎肯定意味着某些版本的 MariaDB 而不是 MySQL,也不是 Percona。 (至少在不久的将来。)
version
的开头部分:
您需要什么功能? Percona 有可能在 MariaDB 10.2 来自 MySQL 之前对其进行改造。
即使version
是5.1.53-rel11.7-log
或5.5.35-0ubuntu0.12.04.2-log
,第一部分也会为您提供 MySQL/MariaDB/Percona 版本的重要部分。
Percona 版本如下所示:5.5.31-30.3-log
、5.6.30-76.3-56-log
、5.6.19-67.0-log
-- 请注意初始 3 之后的额外 2 或 3 个数字。
MariaDB 总是以 N.N.N-MariaDB
开头
Oracle 的 MySQL 以N.N.N
开头,但可能会以-enterprise
(付费版)、-community
(免费版)、-0ubuntu0
(由 Ubuntu 移植)、-Debian
等继续。
MariaDB:5.1、5.2、5.3、5.4、5.5、10.0、10.1、10.2、10.3、10.4、10.5 Oracle 和 Percona:5.1、5.5、5.6、5.7、8.0
8.0 周期才刚刚开始。这意味着 5.6 即将关闭,而 5.7 还剩下一些生命,但不会有太多新内容。
澄清什么是“主要”版本。 对于 MySQL(和 Percona),这些是“主要的”,它们不是 连续':5.1、5.5、5.6、5.7、8.0。 对于 MariaDB:5.1、5.2、5.3、5.4、5.5、10.0、10.1、10.2、10.3、10.4、10.5。
【讨论】:
是的,一次把专业从 5 换到 8 意味着他们不想很快赶上。 我添加了更多版本信息。 添加了“主要”版本的列表。 MySQL(和朋友)不考虑“5”。成为“主要”。相反,5.7 是主要的; 5.7.17 是“次要的”。【参考方案2】:$info = $pdo->query("SHOW VARIABLES like '%version%'")->fetchAll(PDO::FETCH_KEY_PAIR);
$server_vendor = strtok($info['version_comment']," ");
$server_version = $info['version'];
【讨论】:
实际上这些变量中的任何一个都包含数据库服务器名称,所以你的命令也只给我关于版本和操作系统的信息。 在某些情况下,它们包括“MySQL”或“mariadb.org”。也许所有 MariaDB 案例;我不能说。【参考方案3】:如果您尝试从 php 应用程序内部执行此操作,您可以(
哪个 php 版本?)对于 PHP 7,使用 mysqli_get_server_info;或 会回来 服务器版本:5.5.5-10.1.23-MariaDB-9+deb9u1 php 7 http://php.net/manual/en/mysqli.get-server-info.php
php 5 & http://php.net/manual/en/function.mysql-get-server-info.php <?php
$link = mysqli_connect("localhost", "my_user", "my_password");
/* check connection */
if (mysqli_connect_errno())
printf("Connect failed: %s\n", mysqli_connect_error());
exit();
/* print server version */
printf("Server version: %s\n", mysqli_get_server_info($link));
/* close connection */
mysqli_close($link);
?>
【讨论】:
以上是关于如何检测连接的数据库是 MariaDB 还是 MySQL?的主要内容,如果未能解决你的问题,请参考以下文章