我有一个错误需要解决.它的:
[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.
谢谢..
我正在使用以下设置从PHP应用程序访问MS-SQL数据库
非参数化查询工作正常.唯一的问题是被迫关闭单个结果语句(使用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) 我要问并回答这个问题,因为我花了很长时间才弄明白,我希望答案一直在这里开始.
问题:一个长时间运行的unixODBC查询阻止来自同一个应用程序的所有其他查询.
问题是:如何阻止这种情况发生.
我想使用连接到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) 我运行的是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.
我按照本指南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) 我目前正在尝试使用 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) 我目前有以下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程序连接到不同的数据库。
Pyodbc用于连接数据库。我想从PostgreSQL开始,认为它是最简单的,但是我在Alpine Linux Package Manager中找不到任何软件包。您知道如何安装这样的驱动程序吗?
为了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) 我正在尝试从 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 文件中注册,我首先运行: …