我已经设置FreeTDS连接到SQL Server数据库.当我尝试在Mac(Lion)上的终端中打开TSQL时出现此错误:
locale is "en_US.UTF-8"
locale charset is "UTF-8"
using default charset "UTF-8"
Error 20017 (severity 9):
Unexpected EOF from the server
OS error 36, "Operation now in progress"
Error 20002 (severity 9):
Adaptive Server connection failed
There was a problem connecting to the server
Run Code Online (Sandbox Code Playgroud)
有没有人知道可能导致这种情况的原因?
odbc isql
无法连接到数据源:
$ isql SMS_GTWY username password -v
Run Code Online (Sandbox Code Playgroud)
收益:
[S1000][unixODBC][FreeTDS][SQL Server]Unable to connect to data source
[01000][unixODBC][FreeTDS][SQL Server]Unknown host machine name.
[ISQL]ERROR: Could not SQLConnect
Run Code Online (Sandbox Code Playgroud)
虽然没问题tsql
:
$ tsql -S SERVER001 -U username -P password
Run Code Online (Sandbox Code Playgroud)
收益:
locale is "C/UTF-8/C/C/C/C"
locale charset is "UTF-8"
using default charset "UTF8"
1>
Run Code Online (Sandbox Code Playgroud)
$ cat ~/.freetds.conf
:
[SERVER001]
host = 192.168.8.101
port = 1433
tds version = 8.0
client charset = UTF8
Run Code Online (Sandbox Code Playgroud)
$ cat ~/.odbc.ini
:
[SMS_GTWY]
Description = SERVER001 Server
Driver = …
Run Code Online (Sandbox Code Playgroud) 我有一台运行PHP的CentOS 7机器,安装了webtatic PHP 5.6和php56w-mssql软件包.我的应用程序位于连接到MSSQL 2012数据库的Laravel框架中.
我已经修改了locales.conf文件,以便它拥有它
[default]
date format = %Y-%m-%d %I:%M:%S.000
Run Code Online (Sandbox Code Playgroud)
当从tsql中运行查询时,我会返回正确格式化的日期,包括最后的毫秒数.但是,当以PHP交互模式或通过工匠修补程序运行查询时,我得到一个没有尾随毫秒的日期格式.
我有一台运行完全相同配置的Ubuntu机器,并且tsql,PHP和artisan tinker都给了我正确格式化的日期,这只是这个CentOS机器的一个问题.
我freetds.conf
为它的全局设置设置了tds版本7.4并且具有主机条目(这是Laravel中当前配置的),即
[fancy]
host = 10.0.0.12
port = 1433
database = fancy
tds version = 7.4
client charset = UTF-8
Run Code Online (Sandbox Code Playgroud) 有没有办法使用Windows Domain Credentials在Linux上使用python连接到MS SQL Server数据库?
我可以使用Windows凭据从我的Windows机器上完美地连接,但尝试使用pyodbs + freetds + unixodbc从linux python中做同样的事情
>>import pyodbc
>>conn = pyodbc.connect("DRIVER={FreeTDS};SERVER=servername;UID=username;PWD=password;DATABASE=dbname")
Run Code Online (Sandbox Code Playgroud)
导致此错误:
class 'pyodbc.Error'>: ('28000', '[28000] [unixODBC][FreeTDS][SQL Server]Login incorrect. (20014) (SQLDriverConnectW)')
Run Code Online (Sandbox Code Playgroud)
我确定密码写得正确,但我尝试了很多不同的用户名组合:
DOMAIN\username
DOMAIN\\username
Run Code Online (Sandbox Code Playgroud)
甚至
UID=username;DOMAIN=domain
Run Code Online (Sandbox Code Playgroud)
无济于事.有任何想法吗?
我正在使用Ubuntu 9.04
我安装了以下软件包版本:
unixodbc and unixodbc-dev: 2.2.11-16build3
tdsodbc: 0.82-4
libsybdb5: 0.82-4
freetds-common and freetds-dev: 0.82-4
python2.6-dev
Run Code Online (Sandbox Code Playgroud)
我这样配置/etc/unixodbc.ini
:
[FreeTDS]
Description = TDS driver (Sybase/MS SQL)
Driver = /usr/lib/odbc/libtdsodbc.so
Setup = /usr/lib/odbc/libtdsS.so
CPTimeout =
CPReuse =
UsageCount = 2
Run Code Online (Sandbox Code Playgroud)
我这样配置/etc/freetds/freetds.conf
:
[global]
tds version = 8.0
client charset = UTF-8
text size = 4294967295
Run Code Online (Sandbox Code Playgroud)
我已经抓住pyodbc修订31e2fae4adbf1b2af1726e5668a3414cf46b454f
的http://github.com/mkleehammer/pyodbc
,并使用安装了" python setup.py install
"
我在我的本地网络上安装了一台安装了Microsoft SQL Server 2000的Windows机器,然后侦听本地IP地址10.32.42.69.我有一个名为"Common"的空数据库.我有用户"sa",密码为"secret",具有完全权限.
我使用以下python代码来设置连接:
import pyodbc
odbcstring = "SERVER=10.32.42.69;UID=sa;PWD=secret;DATABASE=Common;DRIVER=FreeTDS"
con = pyodbc.connect(odbcstring) …
Run Code Online (Sandbox Code Playgroud) 将计算列添加到SQL Server 2005中的表后,我收到以下消息INSERT
,仅通过PHP(使用PDO)它在SQL Server Managment Studio中正常工作.
为了确保我的一切正确,我使用SQL Server Profiler设置了跟踪,并将INSERT语句复制/粘贴到SQL Server Managment Studio中.它在SSMS中运行得很好,但在PHP中仍然失败.
添加联系人时出错:SQLSTATE [HY000]:常规错误:1934常规SQL Server错误:检查来自SQL Server [1934]的消息(严重级16)[(null)]
我正在尝试从Ubuntu机器连接一个SQL服务器,除了命名实例之外,每个方法都很好用:
这很有效
'data' => array(
'driver' => 'sqlsrv',
'host' => 'xxxx',
'port' => 1433,
'database' => 'db',
'username' => 'user',
'password' => 'pwd',
'prefix' => '',
),
Run Code Online (Sandbox Code Playgroud)
这不
'data' => array(
'driver' => 'sqlsrv',
'host' => 'yyyy\NAMEDINSTANCE',
'port' => 1433,
'database' => 'db',
'username' => 'user',
'password' => 'pwd',
'prefix' => '',
),
Run Code Online (Sandbox Code Playgroud)
我总是最终得到这个错误:
exception 'PDOException' with message 'SQLSTATE[HY000] Unknown host machine name (severity 2)' in /var/www/public/my.api/vendor/laravel/framework/src/Illuminate/Database/Connectors/Connector.php:47
Run Code Online (Sandbox Code Playgroud)
我尝试了所有可能的组合:
有人能帮我吗 ?
编辑 …
我正在使用mac计算机OSX 10.9.Freetds和unixODBC已经安装在我的计算机上并作为扩展添加到php,试图连接到远程MSSQL服务器.以下是我的连接测试:
<?php
$dbh = new PDO('dblib:host=Hostname ;dbname=Dbname', 'user', 'pw');
if (!$dbh) {
die('Something went wrong while connecting to MSSQL');
}
?>
Run Code Online (Sandbox Code Playgroud)
错误日志文件显示:
[error] [client 127.0.0.1] PHP Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[HY000] Unknown host machine name (severity 2)
Run Code Online (Sandbox Code Playgroud)
可能是什么问题呢 ?如果我使用终端连接到同一个数据库,我的freetds和unixODBC似乎正常工作:
$ isql Hostname user pw
+---------------------------------------+
| Connected! |
| |
| sql-statement |
| help [tablename] |
| quit |
| |
+---------------------------------------+
SQL>
Run Code Online (Sandbox Code Playgroud)
和
$ tsql -S Hostname -U user
Password:
locale is "en_US.UTF-8"
locale …
Run Code Online (Sandbox Code Playgroud) 我遇到了一个奇怪的问题,FreeTDS(MacOS 10.11.5)没有连接到运行在Windows Server 2012 r2上的SQL Server 2014,而我之前已经能够连接到这个(大约一周左右).上周的服务器一直在进行安全加固(最近的2012 r2补丁,加上其他东西*我假设是罪魁祸首,但我的本地开发机器(实际上只有我机器上的FreeTDS)似乎是补丁后唯一的问题.
我怀疑导致问题的原因在于RC4密码和SSL 2.0&TLS 1.0被禁用,但我不知道如何修复它.
要清楚,不像其他类似的问题 - 我不能通过任何方式连接freetds到DB01,但我可以连接其他驱动程序到DB01(但我正在开发一个python应用程序,在这个实例中需要freetds)和其他机器可以连接到DB01 .
基本错误是:
$ tsql -S DB01 -U db_user
Password: ****************
locale is "en_US.UTF-8"
locale charset is "UTF-8"
using default charset "UTF-8"
Error 20002 (severity 9):
Adaptive Server connection failed
There was a problem connecting to the server
Run Code Online (Sandbox Code Playgroud)
没有超级帮助 - 我已经完成了正常的故障排除,包括尝试各种TDS版本,在命令行上使用不同的开关等.
该日志还指出存在SSL问题的可能性 - 例如,tls.c
日志记录"handshake failed"
,包含字符串"SSL_Self_Signed_Fallback"的数据包(否则数据包不可读):
net.c:216:Connecting to 000.000.000.000 port 1433 (TDS version 7.4)
net.c:242:tds_open_socket: connect(2) returned "Operation now in progress"
net.c:343:tds_open_socket() succeeded
packet.c:741:Sending …
Run Code Online (Sandbox Code Playgroud) 我很惊讶我无法通过搜索找到这个问题的直截了当的答案.
我有一个PHP的Web应用程序,它接受用户输入.由于应用程序的性质,用户可能经常使用扩展的ASCII字符(也称为"ALT代码").
我目前的具体问题是使用ALT代码26,这是一个右箭头(→).这将伴随其他文本存储在同一字段中(例如,'this?that'
).
我的列类型是NVARCHAR.
这是我尝试过的:
我尝试过不进行转换,只是正常插入值,但值存储为thisâ??that
.
我尝试使用PHP将值转换为UCS-2 iconv('UTF-8', 'UCS-2', $value)
,但是我收到了一个错误Unclosed quotation mark after the character string 't'.
.查询最终看起来像这样:UPDATE myTable SET myColumn = 'this?!that'
.
我已尝试进行上述转换,然后在引用值之前添加N,但我收到相同的错误消息.查询如下所示:UPDATE myTable SET myColumn = N'this?!that'
.
我已经尝试删除UCS-2转换,只是在引用值之前添加N,并且查询再次起作用,但值存储为thisâ that
.
我尝试utf8_decode($value)
在PHP中使用,但随后箭头被替换为问号.
所以任何人都可以回答(看似简单的)问题,如何将这个值存储在我的数据库中,然后按照最初输入的方式检索它?
我正在使用PHP 5.5和MSSQL 2012.如果驱动程序/操作系统版本的任何问题发挥作用,它是通过FreeTDS连接的Linux服务器.没有可能改变这一点.