“本地”,“.”和“localhost”有什么区别?

33

在本地编程连接数据库时,我已经使用了这三种方法。它们之间是否有任何真正的区别?

3个回答

36
最终的结果是相同的。区别在于:
  • “localhost”在TCP/IP层面上被解析,并等价于IP地址127.0.0.1。
  • 根据应用程序的不同,“(local)”可能只是“localhost”的别名。在SQLServer中,“(local)”和“.”表示连接将使用命名管道(共享内存)协议在同一台机器上进行(无需经过TCP/IP堆栈)。
这是理论。实际上,如果您使用其中任何一个,我认为性能或功能方面没有实质的差异。

1
实际上,有一个细微的差别,即您应该检查启用了哪个协议。有时仅默认启用某些协议,这可以在SQL Server配置管理器中最容易地查看和更改。例如,如果您通过TCP/IP连接但仅启用了命名管道,则会产生很大的差异。 - jamiebarrow
我最近注意到,在当前服务器的上下文中,您可以在不指定名称的情况下引用当前实例。我创建了一个作业,但服务器名称不接受本地主机名和实例名称(例如localhost\SQLEXPRESS),但是如果不指定实例名称,则知道(local)。对于SSIS的数据源也是如此,它知道当前实例为(local),而不需要指定实际实例名称。 - MichaelChan

1

它们通常是同义词。但是,这取决于您正在配置的应用程序。只要该应用程序理解您的意思,就不应该导致性能损失。至少在您提前排除之前不会有任何性能损失,如果你懂我的意思。


0
据我所知,点号“.”和“local”是Windows应用程序术语,而不是“标准”术语,“localhost”在TCP/IP级别上解析为“127.0.0.1”,因此如果您想确保在各个平台上“兼容”,应使用localhost或127.0.0.1。

8
"localhost" 不是一个神奇或保留的词语;它的定义存在于 /etc/hosts 或 \WINDOWS\SYSTEM32\DRIVERS\ETC\HOSTS 中,或者... - tzot
1
@tzot,我什么时候说过localhost是一个魔术或保留字了吗?相反,我说dot和local更符合SQL-Server / Windows的命名标准,而localhost通常通过主机文件解析为127.0.0.1,在Unix和Windows上都是如此。愿意仔细阅读吗? - Gustavo Rubio

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接