【问题标题】:Error: nanodbc/nanodbc.cpp:1021: 00000: [错误:nanodbc/nanodbc.cpp:1021:00000:[
【发布时间】:2022-10-14 03:26:31
【问题描述】:

我一直在尝试连接到我正在尝试创建的 SQL。我最近下载了 MySQL、工作台、连接器 ODBC 和 ODBC 管理器,但我找不到解决连接错误的解决方案。 我需要下载其他东西吗?我在 Internet 或 Mac 的 youtube 上找不到解决方案。

packages_required = c("quantmod", "RSQLite", "data.table", "lubridate", "pbapply", "DBI")
install.packages(packages_required)

library("quantmod")
library("RSQLite")
library("data.table")
library("lubridate")
library("pbapply")
library("odbc")

PASS <- new.env()
assign("pwd","My Password",envir=PASS)

library("DBI")
con <- dbConnect(odbc(), Driver = "/usr/local/mysql-connector-odbc-8.0.28-macos11-x86-64bit/lib/libmyodbc8w.so", 
                 Server = "localhost", Database = "data", UID = "root", PWD = PASS$pwd, 
                 Port = 3306)
-----------------------------------------------------------------------------------------

> con <- dbConnect(odbc(), Driver = "/usr/local/mysql-connector-odbc-8.0.28-macos11-x86-64bit/lib/libmyodbc8w.so", 
+                  Server = "localhost", Database = "data", UID = "root", PWD = PASS$pwd, 
+                  Port = 3306)
Error: nanodbc/nanodbc.cpp:1021: 00000: [ 
> 

谢谢

【问题讨论】:

    标签: mysql r connection odbc


    【解决方案1】:

    假设您使用的是 Windows,请尝试使用最新的驱动程序创建 ODBC 连接。 ODBC 数据源工具应该已经安装,您只需打开它并创建一个新工具。

    按 windows 键(或单击搜索望远镜)并输入“ODBC”。 “ODBC 数据源(64 位)”工具应该会出现。

    如何在 Windows 中创建 ODBC 连接

    1. 打开“ODBC 数据源(64 位)”应用程序
    2. 点击“添加”
    3. 选择“MySQL ODBC 8.0 Unicode 驱动程序”(或任何您想要的最新版本) 有)。如果没有,可以在这里下载: https://dev.mysql.com/downloads/connector/odbc/
    4. 输入以下信息: 数据源名称(下面的示例代码使用“my_odbc_connection”)、TCP/IP 服务器、端口、用户和密码
    5. 单击“详细信息”以展开该框。
    6. 在“连接”选项卡中,您可能需要选中“启用明文 身份验证”框。可能取决于您的系统配置。
    7. 单击“测试”以测试连接。如果一切顺利,你 应该得到“连接成功”消息。如果您无法获得 连接成功,请确保您有权访问并且您的 连接信息没有任何拼写错误。
    8. 成功连接后,执行以下 2 个附加步骤( 在连接成功之前不会填充下拉菜单):
    9. 单击“数据库”下拉菜单以选择您将要使用的默认数据库 正在写入数据。如果您将写入超过 1 个数据库 那么您可能需要为每个数据库创建一个单独的连接 您将要写入的内容,指定默认数据库 每个人都不一样。
    10. 单击“字符集”下拉菜单并选择 utf8。

      您现在应该能够使用“DBI”和“ODBC”包直接从 R 读取、写入等任何数据。上面列出的特定设置可能会或可能不会根据情况适用。

      请参阅下面的示例代码。

      延伸阅读:https://www.r-bloggers.com/setting-up-an-odbc-connection-with-ms-sql-server-on-windows/

      #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      #~~ Load or install packages
      #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      # Load or install librarian
      if(require(librarian) == FALSE){
          install.packages("librarian")
        if(require(librarian)== FALSE){stop("Unable to install and load librarian")}
      }
      
      # Load multiple packages using the librarian package
      librarian::shelf(tidyverse, readxl, DBI, lubridate, ODBC, quiet = TRUE)
      
      #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      #~~ Read
      #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      
      # Connect to a pre-defined ODBC connection named "my_odbc_connection"
      conn <- DBI::dbConnect(odbc::odbc(), "my_odbc_connection")
      
      # Create a query 
      query <- "
        SELECT *
        FROM YOUR_SCHEMA.YOUR_TABLE;
      "
      
      # Run the query
      df_data <- DBI::dbGetQuery(conn,query)
      
      # Close the open connection
      try(DBI::dbDisconnect(conn), silent = TRUE)
      
      #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      #~~ Write
      #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      # Define the connection and database you'll be writing to
      conn <- DBI::dbConnect(odbc::odbc(), "my_odbc_connection", db ="YOUR_DEFAULT_DB")
      
      # Define variable types for your data frame. As a general rule, it's a good idea to define your data types rather than let the package guess. 
      field_types <- c("INTEGER","VARCHAR(20)","DATE","DATETIME","VARCHAR(20)","VARCHAR(50)","VARCHAR(20)")
      names(field_types) <- names(df_data)
      
      # Record start time
      start_time <- Sys.time()
      
      # Example write statement
      DBI::dbWriteTable(conn,"YOUR_TABLE_NAME",YOUR_DATA_FRAME,overwrite=TRUE,field.types=field_types, row.names = FALSE)
      
      # Print time difference
      print("Writing complete.")
      print(Sys.time() - start_time)
      
      # Close the open connection
      try(DBI::dbDisconnect(conn), silent = TRUE)
      

    【讨论】:

      猜你喜欢
      • 2021-02-03
      • 2017-12-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-16
      相关资源
      最近更新 更多