标签: unixodbc

FREETDS和UNIXODBC字符转换

我有一个错误需要解决.它的:

[FreeTDS][SQL Server]Error converting characters into server's character set. Some character(s) could not be converted
Run Code Online (Sandbox Code Playgroud)

当我使用土耳其字符插入我得到这个错误.我的问题是如何禁用转换的东西?我通过freetds和unixodbc连接到sql server.

谢谢..

linux sql-server debian unixodbc freetds

6
推荐指数
1
解决办法
6407
查看次数

使用PHP PDO-ODBC,unixODBC和FreeTDS的类型化绑定参数

我正在使用以下设置从PHP应用程序访问MS-SQL数据库

  • RedHat Enterprise Linux 5
  • 带有PDO和PDO_ODBC的PHP 5.2.14
  • unixODBC 2.2.11
  • FreeTDS 0.82.1.dev.20100810

非参数化查询工作正常.唯一的问题是被迫关闭单个结果语句(使用PDOStatment :: closeCursor)以避免"0 [FreeTDS] [SQL Server]无效游标状态(SQLSTATE = 24000)"错误.

但是我遇到了类型绑定参数的一个主要问题.使用这样的代码时:

$stmt = $PDO->prepare('INSERT INTO table (column1, column2)  VALUES (:foo, :bar');
$stmt->bindValue(':foo', 21, PDO::PARAM_INT);
$stmt->bindValue(':bar', 42, PDO::PARAM_INT);
$stmt->execute():
if (!$stmt->execute()) {
 var_dump($stmt->errorInfo();
}
Run Code Online (Sandbox Code Playgroud)

两列都是INT.我得到一个"206 [FreeTDS] [SQL Server]操作数类型冲突:文本与int [SQLSTATE = 22018]"错误不兼容.

在unixODBC日志中,我得到类似的东西

[ODBC][26251][SQLDescribeParam.c][175]
              Entry:
                      Statement = 0x2b73c849fb80
                      Parameter Number = 1
                      SQL Type = 0x7fff9c89e15e
                      Param Def = 0x7fff9c89e154
                      Scale = 0x7fff9c89e15c
                      Nullable = 0x7fff9c89e15a
[ODBC][26251][SQLDescribeParam.c][276]Error: IM001
[ODBC][26251][SQLBindParameter.c][193]
              Entry:
                      Statement = 0x2b73c849fb80 …
Run Code Online (Sandbox Code Playgroud)

php sql-server odbc unixodbc freetds

6
推荐指数
2
解决办法
4982
查看次数

在多线程并发设置中使用unixODBC

我要问并回答这个问题,因为我花了很长时间才弄明白,我希望答案一直在这里开始.

问题:一个长时间运行的unixODBC查询阻止来自同一个应用程序的所有其他查询.

问题是:如何阻止这种情况发生.

unixodbc

6
推荐指数
1
解决办法
5859
查看次数

unixODBC/Oracle:如何仅在连接字符串中指定所有数据源信息,而不在odbc*.ini文件中指定

我想使用连接到Oracle(11g)unixODBC.我希望连接字符串只能指定所有数据库/数据源信息,而ODBC INI文件(/etc/odbc.ini/etc/odbcinst.ini)只包含通用驱动程序信息,比如在哪里找到'.so'等等,即我希望它们是静态的.我想这样做,以便我可以从外部获取用户的连接字符串,并连接到数据源,而无需修改任何INI文件或任何其他磁盘配置.

我看到的所有示例都让我/etc/odbc.ini像这样定义服务器信息:

[myDSNname]
Driver = OracleODBC-11g
DSN = OracleODBC-11g
ServerName = //xxx.xxx.xxx.xxx:1521/SID_NAME
UserID = my_user
Password = my_pass
Run Code Online (Sandbox Code Playgroud)

现在,我想出了如何通过添加"UID=my_user;PWD=my_pass"到连接字符串将UserID和密码输出到连接字符串中,然后将其从中删除odbc.ini.当我无法找到ServerName离开odbc.ini和进入连接字符串的方式时,我的快乐很快就过去了.那我该怎么做?有没有办法odbc.ini彻底摆脱DSN,只有连接字符串中的Driverfrom odbcinst.ini,就像我们为MySQL做的那样?

编辑: 尝试任何来自www.connectionstrings.com的连接字符串,似乎不需要TNS或DSN,包含EZCONNECT变体,都给我:

[HY000] [unixODBC][Oracle][ODBC][Ora]ORA-12162: TNS:net service name is incorrectly specified
    (12162) (SQLDriverConnectW)
Run Code Online (Sandbox Code Playgroud)

oracle unixodbc

6
推荐指数
1
解决办法
5719
查看次数

其中一个SELECT使用unixOdbc失败 - SQLSTATE [24000]:无效的游标状态

我运行的是Ubuntu 13.10,安装了FreeTDS和ODBC(包:php5-odbc).我使用tds version = 8.0,但也试过tds version = 7.2.

我正在使用PDO,这是我的DSN:

$dsn = sprintf('odbc:Driver=FreeTDS;Server=%s;Port=1433;Database=%s', DB_SQL_SERVERNAME, DB_DB_NAME);
Run Code Online (Sandbox Code Playgroud)

我连接到MSSQL实例并使用事务执行一些INSERT/SELECT查询,但我无法弄清楚为什么此查询失败:

SELECT id 
FROM tblColumns 
WHERE siteID = 10063 AND 
    typeID = 1000 AND 
    extendedTypeID = 18 AND 
    label = 'RwThiFc85A'
Run Code Online (Sandbox Code Playgroud)

给出错误:

SQLSTATE [24000]:无效的游标状态:0 [FreeTDS] [SQL Server]无效的游标状态(/build/buildd/php5-5.5.3+dfsg/ext/pdo_odbc/odbc_stmt.c:254中的SQLExecute [0])

我之前正在运行一系列类似的查询并且表现良好,例如:

SELECT id 
FROM tblColumns 
WHERE siteID = 10063 AND 
    typeID = 1000 AND 
    extendedTypeID = 3 AND 
    label = 'VwThiFc91B'
Run Code Online (Sandbox Code Playgroud)

你知道为什么会这样吗?

我没有dblib和sqlsrv这样的问题,但是现在我在Unix上并且不能使用sqlsrv,并且由于dblib UTF-8编码的问题,我试图使用ODBC.

php sql-server odbc unixodbc freetds

6
推荐指数
1
解决办法
1万
查看次数

RODBC与MAC无法正常工作.使用unixODBC和Rstudio

我按照本指南http://eriqande.github.io/2014/12/19/setting-up-rodbc.html让RODBC使用MAC,我可以连接到数据库.

Marcos-MacBook-Pro:~ MarcoB$ isql -v ODBC_SQLSS_R **** ******  
+---------------------------------------+  
| Connected!                            |  
|                                       |    
| sql-statement                         |  
| help [tablename]                      |  
| quit                                  |   
|                                       |  
+---------------------------------------+  
SQL> 
Run Code Online (Sandbox Code Playgroud)

配置文件根据指南设置.

Marcos-MacBook-Pro:~ MarcoB$ cat /usr/local/etc/freetds.conf 
[ODBC_SQLSS_R]    
host = xxx.xxx.xxx.xxx    
port = 1433    
client charset = UTF-8



Marcos-MacBook-Pro:~ MarcoB$ cat /usr/local/etc/odbc.ini   
[ODBC_SQLSS_R]  
Driver = /usr/local/lib/libtdsodbc.so  
Server = xxx.xxx.xxx.xxx
POrt = 1433
Run Code Online (Sandbox Code Playgroud)

我安装了RODBC包

> install.packages("RODBC", type = "source")  
...
** R  
** inst  
** preparing package for lazy loading  
** help  
*** …
Run Code Online (Sandbox Code Playgroud)

macos r unixodbc rodbc rstudio

6
推荐指数
1
解决办法
1371
查看次数

使用 PyODBC 从 Linux 连接到 SQL Server

我目前正在尝试使用 PyODBC 连接到 SQL Server(我无法查看,但有凭据)。我的代码在我的 Windows 桌面上工作,但在移到我的 RedHat Linux 机器上时不起作用。我在 Linux 上需要它来支持一个项目。

这是我所拥有的:

server = 'tcp:myserver\inst1'
database = 'mydatabase'
username = 'myusername'
password = 'mypassword'

cnxn = pyodbc.connect('DRIVER={ODBC Driver 13 for SQL Server};SERVER=' + server + ';DATABASE=' + database + ';UID=' + username + ';PWD=' + password)
Run Code Online (Sandbox Code Playgroud)

这是我得到的错误:

pyodbc.OperationalError: ('HYT00', u'[HYT00] [unixODBC][Microsoft][ODBC Driver 13 for SQL Server]Login timeout expired (0) (SQLDriverConnect)')
Run Code Online (Sandbox Code Playgroud)

Windows 版本和 Linux 版本之间的一个区别是驱动程序部分。Windows 使用“{SQL Server}”,而 Linux 版本使用“{ODBC Driver 13 for SQL Server}”。

在我的 /etc/odbcinst.ini 文件中,我有以下信息:

[ODBC Driver 13 …
Run Code Online (Sandbox Code Playgroud)

python linux sql-server unixodbc pyodbc

6
推荐指数
1
解决办法
6286
查看次数

在Alpine Linux Docker容器中安装ODBC驱动程序

我目前有以下Dockerfile创建我的Docker映像的方法。

FROM python:3.6.6-alpine3.8

# Add dependencies for Python packages pandas, numpy and pyodbc
RUN apk add --no-cache curl gcc g++ unixodbc-dev
RUN ln -s /usr/include/locale.h /usr/include/xlocale.h

# Project files
ARG PROJECT_DIR=/srv/scripts
RUN mkdir -p $PROJECT_DIR
WORKDIR $PROJECT_DIR
COPY requirements.txt ./

# Install Python dependencies
RUN pip install --upgrade pip
RUN pip install -r requirements.txt
Run Code Online (Sandbox Code Playgroud)

我想在此图中包括各种ODBC驱动程序,以便可以使用它们从容器中运行的Python程序连接到不同的数据库。

  • Python程序Pyodbc用于连接数据库。
  • 我需要安装的ODBC驱动程序是:
    • PostgreSQL的
    • 的MySQL
    • 女士SQL Server
    • Teradata
    • 甲骨文
    • 蜂巢
    • 黑斑羚

我想从PostgreSQL开始,认为它是最简单的,但是我在Alpine Linux Package Manager中找不到任何软件包。您知道如何安装这样的驱动程序吗?

odbc unixodbc pyodbc docker dockerfile

6
推荐指数
2
解决办法
5352
查看次数

Mac OS X 上的 ODBC Sql Server 17 驱动程序

为了python在 MAC 上执行此代码 [适用于 Ubuntu 18],

import pyodbc as odbc

sql_conn_irs = odbc.connect('DRIVER={ODBC Driver 17 for SQL Server};SERVER=xxx.xxx.xxx.xxx;DATABASE=irs;UID=xxxxx;PWD=xxxxxxxx;')
Run Code Online (Sandbox Code Playgroud)

我是SQL Server Driver这样安装的:

mm2:~ ivan$ HOMEBREW_NO_ENV_FILTERING=1 ACCEPT_EULA=Y brew install msodbcsql17 mssql-tools
==> Installing msodbcsql17 from microsoft/mssql-release
==> Installing dependencies for microsoft/mssql-release/msodbcsql17: unixodbc
==> Installing microsoft/mssql-release/msodbcsql17 dependency: unixodbc
==> Downloading https://homebrew.bintray.com/bottles/unixodbc-2.3.7.mojave.bottle.1.tar.gz
==> Downloading from https://akamai.bintray.com/d9/d9f30688c0639d73b9e3a4b4b94d3679b2762e2cf0bff6b2ad64fcd175cc30ca?__gda__=exp=1581885422~hmac=2d3
######################################################################## 100.0%
==> Pouring unixodbc-2.3.7.mojave.bottle.1.tar.gz
  /usr/local/Cellar/unixodbc/2.3.7: 46 files, 1.8MB
==> Installing microsoft/mssql-release/msodbcsql17
==> Downloading https://download.microsoft.com/download/1/9/A/19AF548A-6DD3-4B48-88DC-724E9ABCEB9A/msodbcsql-17.5.1.1.tar.gz
######################################################################## 100.0%
==> odbcinst -u -d -n "ODBC Driver …
Run Code Online (Sandbox Code Playgroud)

macos unixodbc pyodbc python-3.x

6
推荐指数
1
解决办法
2万
查看次数

R odbc::odbcListDrivers() 未在 /opt/homebrew/etc/odbcinst.ini 中列出驱动程序

我正在尝试从 R studio 连接到 Microsoft SQL Server 数据库。

我使用自制程序安装了 unixODBC 驱动程序管理器:

brew install unixodbc
Run Code Online (Sandbox Code Playgroud)

然后我尝试按照https://db.rstudio.com/best-practices/drivers/上的建议安装 freetds 驱动程序

# SQL Server ODBC Drivers (Free TDS)
  brew install freetds --with-unixodbc
Run Code Online (Sandbox Code Playgroud)

我收到错误:

Error: invalid option: --with-unixodbc
Run Code Online (Sandbox Code Playgroud)

我发现一个消息来源说该选项不再可用,因为它现在是默认选项。因此,我跑了:

brew install freetds
Run Code Online (Sandbox Code Playgroud)

然后,在 R Studio(和 R)中,我尝试列出已安装的驱动程序,但未找到:

> odbc::odbcListDrivers()
[1] name      attribute value    
<0 rows> (or 0-length row.names)
Run Code Online (Sandbox Code Playgroud)

接下来,我尝试根据https://learn.microsoft.com/en-us/sql/connect/odbc/linux-mac/install-microsoft-odbc-driver-sql安装适用于 SQL Server (macOS) 的 Microsoft ODBC 驱动程序-server-macos?view=sql-server-ver15并按照https://db.rstudio.com/databases/microsoft-sql-server/上的建议

我跑:

brew tap microsoft/mssql-release https://github.com/Microsoft/homebrew-mssql-release
brew update
HOMEBREW_NO_ENV_FILTERING=1 ACCEPT_EULA=Y brew install msodbcsql17 mssql-tools
Run Code Online (Sandbox Code Playgroud)

为了检查该驱动程序是否已在 odbcinst.ini 文件中注册,我首先运行: …

sql-server odbc r unixodbc

6
推荐指数
1
解决办法
2399
查看次数

标签 统计

unixodbc ×10

sql-server ×5

odbc ×4

freetds ×3

pyodbc ×3

linux ×2

macos ×2

php ×2

r ×2

debian ×1

docker ×1

dockerfile ×1

oracle ×1

python ×1

python-3.x ×1

rodbc ×1

rstudio ×1