SQL Server本地数据库执行SELECT SERVERPROPERTY('ServerName') AS 服务器名称;就能拿到当前实例的完整服务器名称;MySQL用SELECT @@hostname;,PostgreSQL要结合SHOW cluster_name和监听地址判断,SQLite这类文件型数据库没有“服务器名称”这个概念。
很多人第一次听到“查看服务器名称”,会以为所有数据库都有一个统一答案,实际不是,SQL Server里的服务器名称通常指“主机名\实例名”,MySQL更常看主机名和端口,PostgreSQL看集群名、监听地址和端口,SQLite则只有数据库文件路径,先分清数据库类型,再动手查,比在连接框里反复试localhost更有效。
SQL Server本地数据库怎么查看服务器名称
本地SQL Server最常见的入口是SQL Server Management Studio,连接成功后,对象资源管理器最上方的根节点会显示当前实例名称,这个名称可能是主机名,也可能是主机名\SQLEXPRESS这类命名实例,连接对话框里的“服务器名称”可以填localhost、、(local),但这些是连接别名,不一定等于查询出来的规范实例名。
在查询窗口执行下面几句,可以直接看到结果:
SELECT SERVERPROPERTY('ServerName') AS 服务器名称;
SELECT @@SERVERNAME AS 服务器名称;
SELECT
SERVERPROPERTY('MachineName') AS 主机名,
SERVERPROPERTY('InstanceName') AS 实例名,
SERVERPROPERTY('ServerName') AS 完整服务器名称;
默认实例一般返回主机名,命名实例返回“主机名\实例名”,据微软官方文档的说明,SERVERPROPERTY('ServerName')返回当前实例的完整名称,实际排查时,可以把@@SERVERNAME和SERVERPROPERTY('ServerName')一起执行,交叉核对,服务器改过名的情况下,两者偶尔会出现不一致,以实例实际配置和SSMS连接结果为准更稳妥。
如果想从Windows侧确认,按Win+R输入services.msc,在服务列表里找SQL Server (MSSQLSERVER)或SQL Server (SQLEXPRESS),服务名能帮助你判断默认实例还是命名实例,但它不是查询语句的直接替代品,业内专家指出,本地数据库的服务器名称本质上是实例标识,不是网络域名,所以不要把“能连上”和“名称查得准”混为一谈。
本地数据库查看服务器名称命令有哪些
不同数据库的命令差异较大,下面这张表可以直接对照使用。
| 数据库类型 | 常用命令 | 说明 |
|---|---|---|
| SQL Server | SELECT SERVERPROPERTY('ServerName'); |
返回完整实例名,优先使用 |
| SQL Server | SELECT @@SERVERNAME; |
返回当前服务器名,适合快速查看 |
| MySQL | SELECT @@hostname; |
返回主机名,不包含实例概念 |
| MySQL | SHOW VARIABLES LIKE 'hostname'; |
查看主机名变量 |
| MySQL | SELECT @@port; |
配合主机名判断本地实例 |
| PostgreSQL | SHOW cluster_name; |
查看集群名,未设置时可能为空 |
| PostgreSQL | SELECT inet_server_addr(), inet_server_port(); |
查看当前连接对应的地址和端口 |
| SQLite | PRAGMA database_list; |
查看数据库文件路径,不存在服务器名 |
SQL Server里还有一个容易误用的函数:SELECT HOST_NAME();,它返回的是客户端主机名,不是数据库服务器名称,你在本机执行时可能看起来“差不多”,换成远程连接就会暴露问题,MySQL的@@hostname只给主机名,命名实例、端口区分要靠服务名和@@port补充,PostgreSQL的SHOW cluster_name;在部分环境返回空值,这时用操作系统命令hostname和连接信息一起判断更实际。
Windows电脑上SQL本地数据库怎么查看服务器名称
在Windows电脑上排查本地库,建议按“连接入口、服务名称、命令行验证”三步走。
- 打开SSMS,服务器名称先填
localhost或,能连上再执行SELECT SERVERPROPERTY('ServerName');。 - 如果本机装的是Express版,尝试
.\SQLEXPRESS或主机名\SQLEXPRESS,不要只试默认实例。 - 使用LocalDB时,先在命令行执行
sqllocaldb info,再用sqlcmd -S "(localdb)\MSSQLLocalDB" -Q "SELECT SERVERPROPERTY('ServerName');"验证。 - 打开
services.msc,看SQL Server服务显示名,默认实例常见SQL Server (MSSQLSERVER),命名实例常见SQL Server (SQLEXPRESS)。 - MySQL环境可用
mysql -u root -p -e "SELECT @@hostname, @@port;",再对照Windows服务MySQL80判断本地实例。 - PostgreSQL环境可用
psql -U postgres -c "SHOW cluster_name;"和psql -U postgres -c "SELECT inet_server_addr(), inet_server_port();",同时看Windows服务名称和端口。
命令行验证的好处是可复制、可复核,比如SQL Server用:
sqlcmd -S localhost -E -Q "SELECT SERVERPROPERTY('ServerName') AS ServerName;"
命名实例则改成:
sqlcmd -S .\SQLEXPRESS -E -Q "SELECT SERVERPROPERTY('ServerName') AS ServerName;"
连接失败时,优先检查实例名、端口和SQL Server Browser服务,不要一上来就重装数据库,行业共识认为,本地库排查先看实例名,再看端口和主机名,顺序反了容易把简单问题复杂化。
MySQL和SQL Server查看服务器名称有什么区别
两者最大的区别在“名称”的含义,SQL Server有默认实例和命名实例,服务器名称经常是“主机名\实例名”,它直接对应数据库引擎实例,MySQL通常没有同样形式的实例名,更多是用主机名、端口和服务名来区分本地实例,你查到的@@hostname是主机名,不是完整的连接标识。
从命令上看,SQL Server优先用SERVERPROPERTY('ServerName'),MySQL优先用@@hostname加@@port,从连接上看,SQL Server的localhost、、(local)是常见别名,MySQL的localhost和0.0.1在套接字与TCP连接上还可能存在差异,PostgreSQL又不同,集群名、监听地址、端口三者要一起看,SQLite最简单,也最容易被误解:它没有独立服务器进程,所谓“服务器名称”并不存在,能查的是数据库文件位置。
SQL本地数据库查看服务器名称需要收费吗
查看服务器名称本身通常不需要额外付费,SQL Server Express、MySQL Community、PostgreSQL、SQLite都提供内置命令,SSMS、pgAdmin、DBeaver社区版等工具也能完成查看,商业版数据库的授权费用与“查名称”这个动作无关,第三方图形工具的高级功能可能收费,但仅为了执行一条查询命令,没必要专门购买工具。
真正需要留意的是权限和版本差异,Oracle环境查询v$instance需要相应权限;PostgreSQL的集群名未配置时查不到有效值;SQL Server改过主机名后可能需要重新核对实例配置,把这些边界条件提前想到,比事后在连接字符串里猜更省时间。
把上面几段串起来,本地数据库查看服务器名称并不神秘:SQL Server认实例名,MySQL认主机名和端口,PostgreSQL认集群名和监听地址,SQLite认文件路径,先确认数据库类型,再执行对应命令,基本不会走偏。
Q&A:SQL本地数据库查看服务器名称常见问题
问:SSMS里显示的服务器名称和查询结果不一致怎么办?
先确认连接的是不是同一个实例,SSMS根节点显示的是当前连接实例,查询语句返回的是实例内部名称,服务器改过名、连接用了别名、或者连到了另一个命名实例,都可能造成差异,建议同时执行SELECT @@SERVERNAME;和SELECT SERVERPROPERTY('ServerName');,再对照Windows服务名和端口。
问:本地数据库查看服务器名称命令能不能跨数据库通用?
不能通用,SQL Server的SERVERPROPERTY不能拿到MySQL上执行,MySQL的@@hostname也不适用于PostgreSQL,跨数据库排查时,先判断数据库类型,再选对应命令,连接工具里的“服务器名称”输入框只是连接入口,不等于数据库内部返回的实例名。
问:为什么SQLite查不到服务器名称?
SQLite是嵌入式文件数据库,没有独立服务器进程,所以不存在服务器名称这一查询字段,它能查的是数据库文件路径,例如在SQLite命令行执行PRAGMA database_list;或.databases,看到的是文件位置,而不是主机名或实例名。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/773573.html

