使用Go语言连接MS SQL Server的时候,踩到的坑汇总一下。
先前一直使用gorm比较多,在做数据查询的时候,也很方便,当数据库需要连接到SQL Server的时候,也自然会想到使用这个库来做。连接字的信息其实很关键。
- 数据库连接字符串的格式信息
- sqlserver://gorm:LoremIpsum86@localhost:9930?database=gor
- server=localhost;user id=user;password=pwd;port=1433;database=dbname;
两种示例,最后都可以完成数据库的链接。只是需要注意2)示例中用的是分号来拼接。
- 数据库连接时碰到的问题:
- 数据库连接失败,出现下面的错误
(EXTRA *errors.errorString=Login error: EOF)
在碰到这样的错误的时候,第一反应是数据库的连接字符串的格式有问题,后面还考虑到换成了另外一个框架(go-mssqldb)来做数据库连接,但问题还是没有解决。出现过这样的错误信息:
read: connection reset by peer
An existing connection was forcibly closed by the remote host
走到这里,开始想到是不是SQL Server数据库这边的设置的问题。连接的SQL Server是2008 R2的版本,会不会是MS这边的问题。
在看到go-mssqldb中的github issues里面的相似内容,就提到需要升级2008 R2的SP2版本的解决办法。这样的操作太折腾,放弃了。后来看到大神这样的解决办法,在连接字符串中增加
encrypt=disable
的解决办法,本地测试了一下,解决了先前的错误信息。
也就是这样的格式信息:
sqlserver://gorm:LoremIpsum86@localhost:9930?database=gor&encrypt=disable
或者
server=localhost;user id=gorm;password=LoremIpsum86;port=9930;database=gor;encrypt=disable