SqlServer利用ODBC连接Mysql数据库

时间:2024-10-21 13:57:17

一、连接效果

如下图:LinkServer上可以看到我通过ODBC创建的数据源LPTEST,以及数据源中的数据库world,还有相应的三张表;通过下面的sql可以查看数据。
在这里插入图片描述
在这里插入图片描述

二、安装Mysql的ODBC

1. 下载MYsqlODBC

官网下载地址

一般是选最新的版本下载。
选64位还是32位,要保证和你的sqlserver版本一致,利用下面sql查看:

select @@VERSION

我的结果为64位,如下图:
在这里插入图片描述

2. 安装MYsqlODBC
双击msi文件即可安装,但是可能提示需安装Redistributable for Visual Studio 2019的提示,导致安装不了。按照下面步骤安装下就好了。
Redistributable for Visual Studio 2019下载地址
点击下载地址拉到最下面other tools(如下图) 然后找到名字一样的下载即可。
在这里插入图片描述

三、配置ODBC

1. 找到ODBC

在这里插入图片描述

2. 在系统DSN中点击添加

在这里插入图片描述
3. 然后就能看到我们安装的mysqlODBC了,选择Unicode driver的,点击完成

在这里插入图片描述

4. 接着配置连接(这一步就不多说了,很简单)

特别注意:这个地方的账号密码尽量不要使用安装Mysql时的root账户,否则会产生很多问题。
在这里插入图片描述
- root账户可能遇到的问题:错误Connection Failed.如下图
在这里插入图片描述
解决办法:
这个报错是因为root用户的问题,root用户默认是localhost身份,不支持远程连接。需按下面sql修改:

//如果报了上面的错,那第一次执行这个sql显示的应该是localhost,那就执行下面的update语句
select host from user where user = 'root'
//执行完这个update语句一定要重启mysql服务
update user set host = '%' where user = 'root';

一定要重启mysql服务后再次尝试上面的连接过程。

5. 连接成功
在这里插入图片描述

四、打开ssms增加linked servers

在这里插入图片描述
在这里插入图片描述
经过上面两步,就可以连接成功了,连接成功是没有成功窗口的。

- linkedserver可能报错问题

如果上面连接linkedserver时可能报如下错误:

TITLE: Microsoft SQL Server Management Studio
------------------------------

The linked server has been updated but failed a connection test. Do you want to edit the linked server properties?

------------------------------
ADDITIONAL INFORMATION:

An exception occurred while executing a Transact-SQL statement or batch. (Microsoft.SqlServer.ConnectionInfo)

------------------------------

无法初始化链接服务器“LPTEST”的 OLE DB 访问接口“MSDASQL”的数据源对象。
链接服务器"LPTEST"的 OLE DB 访问接口 "MSDASQL" 返回了消息 "[MySQL][ODBC 8.0(w) Driver]Access denied for user 'ea'@'10.72.66.8' (using password: YES)"(Microsoft SQL Server, Error: 7303)

For help, click: https:///sql/relational-databases/errors-events/mssqlserver-7303-database-engine-error

------------------------------
BUTTONS:
&Yes
&No
------------------------------

解决办法:

  1. 新增用户名并分配权限
  2. 需要对root账户做些操作,这个方法不建议,就不做解释了。

五、linkedserver查询语句

利用OPENQUERY

//LPTEST就是Linkedserver的名字;第二个参数就是相关语句,
SELECT * FROM OPENQUERY(LPTEST,'select * from city') 

特别注意:OPENQUERY中的sql语法是mysql的,而不是sqlserver的。

- 查询报错问题,如下图:

明确指明了列名District,而且能看到返回行数,就是数据有问题,。
在这里插入图片描述

解决办法:
1.修改源数据
2.将OPENQUERY中的查询语句中的列转下类型,如下

  SELECT * FROM OPENQUERY(LPTEST,'select convert(  using UTF8  ) as cc from city c')