当前位置:首页 > 问答 > 正文

数据库连接字符串怎么写才对,语法规则和常见坑点聊聊

你得知道连接字符串是什么,简单说,它就是一长串文本,里面包含了你的程序要连接到数据库所需要的所有信息,就像你要去一个朋友家做客,你需要知道地址(服务器地址)、门牌号(数据库名),还要有钥匙(用户名和密码),连接字符串就是把所有这些信息按照固定的格式写在一起。

连接字符串的基本语法规则

连接字符串看起来是一整段,但其实它是由多个“键值对”组合而成的,每个键值对告诉数据库驱动程序一个特定的信息,它的基本格式是:关键词=值,不同的键值对之间用分号 隔开。

举个例子,一个比较典型的连接字符串可能是这样的: Server=我的服务器地址;Database=我的数据库名;User Id=我的用户名;Password=我的密码;

这里就包含了四个关键的键值对:

  • Server=我的服务器地址:告诉程序数据库服务器在哪台电脑上,可以是IP地址,也可以是电脑名。
  • Database=我的数据库名:告诉程序要连接的是服务器上的哪个具体的数据库,一个数据库服务器上可以创建很多个数据库。
  • User Id=我的用户名Password=我的密码:这是你的身份凭证,就像账号密码一样,用来登录数据库。

常见数据库的连接字符串写法(关键词)略有不同

这是一个非常容易出错的点!不同的数据库(比如MySQL、SQL Server、PostgreSQL)它们约定俗成的“关键词”可能不一样,你不能把连接MySQL的字符串直接拿去连SQL Server。

  • 对于微软的 SQL Server

    • 服务器地址通常用 ServerData Source
    • 数据库名通常用 DatabaseInitial Catalog
    • 身份验证有两种方式:一种是直接用用户名密码(叫做SQL Server身份验证),就是上面的 User IdPassword;另一种是使用当前Windows登录用户的身份去连接(叫做Windows身份验证),这时字符串会写成 Integrated Security=TrueTrusted_Connection=True,如果你用了Windows身份验证,就不能再写 User IdPassword 了。
    • 示例(Windows身份验证):Server=localhost; Database=TestDB; Integrated Security=True;
    • 示例(SQL Server身份验证):Data Source=192.168.1.100; Initial Catalog=TestDB; User Id=sa; Password=123456;
  • 对于 MySQL

    数据库连接字符串怎么写才对,语法规则和常见坑点聊聊

    • 服务器地址通常用 Server
    • 数据库名用 Database
    • 用户名用 Uid(注意,这里是 Uid,不是 User Id)。
    • 密码用 Pwd(注意,这里是 Pwd,不是 Password)。
    • 示例:Server=localhost; Database=test; Uid=root; Pwd=123456;
  • 对于 PostgreSQL

    • 它通常使用一个叫 ConnectionString 的参数,里面的关键词又有所不同。
    • 服务器地址用 Host
    • 数据库名用 Database
    • 用户名用 Username
    • 密码用 Password
    • 示例:Host=localhost; Database=test; Username=postgres; Password=123456;

你看,光是用户名密码的关键词就有好几种写法,这是第一个大坑。

常见的坑点和注意事项

  1. 空格和分号:键值对之间必须用分号隔开,分号后面可以加空格也可以不加,但关键词和等号之间最好不要有空格。Server=A;Database=B 是对的,Server = A ; Database = B 虽然有些驱动程序能容忍,但不是一个好习惯,可能在某些严格的环境下出错。

  2. 包含特殊字符的密码或值:如果你的密码里包含了分号 、单引号、双引号这些在连接字符串里有特殊意义的字符,那就麻烦了,比如你的密码是 abc;123,如果你直接写成 Password=abc;123,驱动程序会认为 Password=abc 就结束了,后面的 123 成了一个无效的关键词,导致连接失败,正确的处理方法是把这个值用双引号括起来,Password="abc;123",同样,如果服务器名或数据库名有特殊字符,也要这样处理。

    数据库连接字符串怎么写才对,语法规则和常见坑点聊聊

  3. 端口号:很多时候数据库服务器并不是运行在默认的端口上,比如MySQL默认是3306,SQL Server默认是1433,但如果管理员改了端口,你就必须在连接字符串里指定,通常用的关键词是 Port(MySQL/PostgreSQL)或是在Server地址后面加逗号指定(SQL Server)。

    • MySQL示例:Server=localhost;Port=3307;Database=test;Uid=root;Pwd=123456;
    • SQL Server示例:Server=192.168.1.100,1433;Database=test;User Id=sa;Password=123456;
  4. 连接超时:网络不好的时候,程序可能尝试连接很久都没反应,卡在那里,为了避免这种情况,可以设置一个连接超时时间(单位是秒),关键词通常是 Connect TimeoutConnection TimeoutConnect Timeout=30 表示如果30秒内还连不上,就报错放弃。

  5. 把连接字符串硬编码在代码里:这是最最不推荐的做法!尤其是包含密码的信息,一旦你的代码泄露(比如上传到公开的GitHub),你的数据库就完全暴露了,正确的做法是把它放在配置文件里(NET的 appsettings.json,Java的 application.propertiesapplication.yml),然后从配置文件读取,这样即使要修改数据库密码,也只需要改配置文件,而不需要重新编译代码。

  6. 信任服务器证书(现代常见坑点):现在为了安全,很多数据库要求使用SSL加密连接,但在开发环境或内网环境,可能用的是自签名的证书(不是由权威机构颁发的),程序默认不信任这种证书,会导致连接失败,这时候你可能会看到一个和SSL相关的错误,为了解决这个问题,你可能需要在连接字符串里加上 TrustServerCertificate=True(SQL Server)或 SslMode=Preferred(MySQL)之类的参数。但要注意,在生产环境中这可能会带来安全风险,请谨慎使用。

写对连接字符串的关键在于:

  • 查文档:先确定你连的是什么数据库,去查它的官方文档或可靠来源,看正确的关键词是什么。
  • 注意细节:小心分号、空格和特殊字符。
  • 考虑周全:别忘了端口、超时等可选但重要的参数。
  • 保证安全:千万不要把带密码的连接字符串写死在代码里。

希望这些具体的解释和例子能帮你避开那些常见的坑。