如何检查我可以在其上运行查询的数据库服务器上安装了什么数据库引擎?


11

我想检查可以访问的Datasase服务器上正在运行哪种类型的sql。我只能访问Web界面和表列表。

通过该接口,我可以对列表中存在的表运行查询。

我如何获得有关服务器和服务器运行版本的更多信息。我不知道服务器正在运行的IP或PORT。

我想知道服务器是MySQL,Mircosoft SQL Server,Oracle SQL,Postgre SQL还是其他sql服务器。

我正在谈论的网站就是这个网站: w3schools.com SQL编辑器

编辑2:尽管某些命令选择sqlite_version()对我有用,但它不起作用。这是响应的屏幕截图。

在此处输入图片说明

编辑3:在Chromium浏览器上,命令运行正常。但是,在Firefox浏览器上,该命令无效。

我还提到我正在运行Linux。

您认为可能是在Firefox和Chrome上获得不同结果的原因是什么?


您可以运行查询吗?
DavidדודוMarkovitz

@DuduMarkovitz是的,我可以运行查询。
yoyo_fun

该声明适用于某些人而不适用于其他人的事实似乎表明特定环境很重要。当@joanolo说这些查询在浏览器中运行时,可能是正确的。不同的人使用不同的浏览器,有些可能安装了附加扩展。
Andriy M

2
“表达式中的未定义函数。” 是访问错误消息,因此好像服务器端,他们正在使用Jet
Martin Smith

@MartinSmith在这种情况下,Jet是什么?在哪里可以阅读更多有关它的信息?
yoyo_fun

Answers:


15

我假定您的Web界面可让您发出SQL命令。如果是这样,您可以使用:

SELECT version();

PostgreSQL的

如果您使用的是PostgreSQL数据库,则会收到类似以下的响应

PostgreSQL 9.6.1 on x86_64-apple-darwin14.5.0, compiled by Apple LLVM version 7.0.0 (clang-700.1.76), 64-bit

的MySQL

如果您使用的是MySQL数据库,则答案如下

5.7.12-log

甲骨文

如果您使用的是Oracle数据库,则会收到错误消息:

ORA-00923: FROM keyword not found where expected

(ORA-xxxx告诉您您正在使用Oracle)。要找出哪个特定版本,请尝试:

SELECT banner as "oracle version" from v$version

您会收到类似的响应:

Oracle Database 11g Express Edition Release 11.2.0.2.0 - 64bit Production
PL/SQL Release 11.2.0.2.0 - Production
CORE    11.2.0.2.0  Production
TNS for 64-bit Windows: Version 11.2.0.2.0 - Production
NLSRTL Version 11.2.0.2.0 - Production

Microsoft SQL服务器

如果您使用的是MS SQL Server,则响应也将是一个错误,如下所示:

'version' is not a recognized built-in function name.

在这种情况下,您可以尝试:

SELECT @@version ;

作为响应,您将获得如下所示的内容:

Microsoft SQL Server 2016 (SP1) (KB3182545) - 13.0.4001.0 (X64)   
    Oct 28 2016 18:17:30   
    Copyright (c) Microsoft Corporation  
    Enterprise Edition (64-bit) on Windows Server 2012 R2 Standard 6.3 <X64> (Build 9600: ) (Hypervisor) 

SQLite的

如果您使用的是SQLite数据库,则尝试时会收到一条错误消息SELECT version()

 could not prepare statement (1 no such function: version)

在这种情况下,您可以尝试:

 SELECT sqlite_version()

响应如下所示:

3.14.0

感谢您的回答,但不幸的是,此网站上没有任何内容w3schools
yoyo_fun

最后尝试:SELECT sqlite_version(),您将得到答案。
joanolo '02

1
看起来它们实际上已经完全在您的浏览器上运行的版本。看看github.com/kripken/sql.js
joanolo

有什么方法可以确保确实如此。此浏览器内部版本的SQL语言是否可以检查其版本,或者实际上是此SQL引擎?
yoyo_fun

7

该在线SQL编辑器使用Web SQL数据库,即嵌入在浏览器中的SQL。如果您在http://www.w3schools.com/w3Database.js上查看他们的JS源代码并将API调用与Web SQL的W3C规范进行比较(例如它们如何打开数据库),就很容易辨认出 它们:

w3Database = window.openDatabase('W3SchoolsDemoDatabase', '1.0',
           'W3SchoolsDemoDatabase', 2 * 1024 * 1024);

因此,没有数据库服务器,实际上是执行SQL的浏览器,以及您的浏览器选择使用的SQL引擎(假设它具有SQL功能开始),这 sqlite很有意义。

(编辑:严格来说不是正确的,因为根据Martin Smith的回答,当浏览器不支持Web SQL时,JS提交代码将退回到服务器端MS-Jet引擎)。

请注意,W3C已决定在2010年放弃SQL-in-in-浏览器概念,现在已过时了。


您知道他们为什么要采取这种决定吗?浏览器中的SQL和SQLite之间有什么区别吗?
yoyo_fun

@yoyo_fun:en.wikipedia.org/wiki/Web_SQL_Database有一些指针。或者你也可以问,这个是dba.se一个独立的问题
丹尼尔·维泰

这确实是一个很好的主意:)
yoyo_fun

5

如其他答案所述,它取决于您的浏览器。

如果您的浏览器不支持Web SQL数据库,则最终将其提交回服务器。

在此处输入图片说明

通过运行可以看到这使用了Jet

SELECT X FROM Foobar

Microsoft Jet数据库引擎找不到输入表或查询'Foobar'。确保它存在并且其名称拼写正确。

这意味着TRANSFORM从Firefox访问页面时专有的Access扩展会像工作一样(但是在Chrome中会失败)

在此处输入图片说明


感谢您的详细回答。你能告诉我你是怎么得到第一张截图的吗?您正在使用什么编辑器?它是Web浏览器的扩展吗?
yoyo_fun

@yoyo_fun Firefox内置的开发人员工具
Martin Smith,

3

在OP添加对w3schools.com的引用之前给出了此答案。


如果可以运行查询,请从此开始:

select version();        -- PostgreSQL  e.g.: PostgreSQL 9.6beta2, compiled by Visual C++ build 1800, 64-bit                                                                                                                                            

select version();        -- MySQL       e.g.: 5.7.11-log                                                                                                                                                                                                

select @@version;        -- SQL Server  e.g.: Microsoft SQL Server 2016 (RTM) - 13.0.1601.5 (X64)   Apr 29 2016 23:23:58   Copyright (c) Microsoft Corporation  Express Edition (64-bit) on Windows 7 Enterprise 6.1 <X64> (Build 7601: Service Pack 1)         

select * from v$version; -- Oracle      e.g.: Oracle Database 11g Express Edition Release 11.2.0.2.0 - 64bit Production                      

select sqlite_version(); -- Sqlite:     e.g.: 3.15.1     

thansk,但不幸的是,该命令在w3schools网站和其他网站上不起作用。地址为www.w3schools.com/sql/trysql.asp?filename=trysql_select_all
yoyo_fun

1
也请尝试Sqlite
DavidדודוMarkovitz

Sqlite。检查更新后的答案
DavidדודוMarkovitz

Markovits运行命令“ select sqlite_version()”的结果是“表达式中的未定义函数'sqlite_version'。”
yoyo_fun

1
(答案取决于浏览器)
joanolo

2

对于W3Schools页面使用的SQL引擎的特定情况:

Safari,Chrome和Opera浏览器

如果您使用的是Safari浏览器(我在Mac OS X 10.12上进行了测试),则该页面使用的是SQLite,它似乎内置在浏览器本身中。当您按下“运行SQL”按钮时,它使用任何外部资源。进一步的逆向工程表明,该页面正在通过以下JavaScript代码初始化数据库:

function w3WebSQLInit() {
    var w3DBObj = this;
    w3Database = window.openDatabase('W3SchoolsDemoDatabase', '1.0', 'W3SchoolsDemoDatabase', 2 * 1024 * 1024);
   ...
}

window.openDatabase表示代码正在使用Web SQL数据库。这是几年前由W3C定义的,并由Opera,Safari和Chrome(AFAIK)付诸实践,但FireFox(或Explorer)并未付诸实践。这三种浏览器似乎都通过在其内部嵌入不同版本的SQLite来实现“ Web SQL数据库”。

在这一点上,W3C页面声称:

“当心。该规范不再处于主动维护中,并且Web应用程序工作组不打算进一步维护它。”

我测试了一个Chrome浏览器(在Windows 10上为56.0.2924.87版本),它似乎使用了SQLite 3.10.2。Opera(在Windows 10上为12.15版)使用SQLite 3.7.9。

Opera在它们的“关于”中足够清楚:

在此处输入图片说明

Safari浏览器客户端存储和离线应用程序编程指南还提到,

Safari从Safari 3.1和iOS 2.0开始,支持HTML5 JavaScript数据库类。JavaScript数据库类基于SQLite,提供了一个关系数据库,用于本地存储内容,该内容太大而无法方便地存储在Cookie中(或者太重要了而不能冒风险)用户清除其Cookie时意外删除)。

我没有研究Chrome ...但是我的猜测很明确。

FireFox,Edge和Internet Explore浏览器

如果您使用FireFox浏览器(我在Mac OS X 10.12上进行了测试);相同的W3School页面的行为完全不同。它不会在浏览器上执行查询,而是将请求发送到其服务器。在服务器端,我认为它实际上是在使用类似于MS Access数据库的数据库。一种检查方法是检查(标准)information_schema

如果发出以下查询(在符合标准的数据库中,该查询将为用户提供表的列表):

SELECT * FROM information_schema.tables;

您得到以下(太明显)错误响应

Could not find file 'C:\Windows\SysWOW64\inetsrv\information_schema.mdb'.

如果软件正在寻找.MDB文件,则意味着他们在服务器端使用Microsoft Jet数据库引擎(或等效的东西),并且他们在使用Access .MDB格式文件,该文件对应于以下版本的Access版本。包括2003。(Access 2007和更高版本默认使用.ACCDB格式文件)。

Microsoft Internet Explorer 11的行为方式相同(在Windows 10上);Edge也是如此(在Windows 10上)。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.