37,743
社区成员




……
[TestDB]
host = 10.0.0.100
port = 1433
tds version = 8.0
client charset = UTF-8 #这一行 试过三种情况:1. 去掉;2.UTF-8;3.GBK;结果一样
……
[SQL Server]
Description = FreeTDS ODBC driver for MSSQL
Driver = /usr/local/freetds0.91/lib/libtdsodbc.so
Setup = /usr/lib64/libtdsS.so
FileUsage = 1
CREATE TABLE t(NAME NVARCHAR(100))
CREATE TABLE t2(NAME VARCHAR(100))
#-*- coding:UTF-8 -*-
import pyodbc
DBCONNECTSTR = 'DRIVER={SQL Server};SERVER=10.0.0.100;port=1433;DATABASE=TESTDB;UID=TESTDB;PWD=TESTDB;TDS_Version=8.0;' #连接串尝试过加上charset="utf-8",没有区别
conn=pyodbc.connect(DBCONNECTSTR)
#备注一下,以下18种情况均试过,实际代码没有最开头的数字和空格,#注释保留
# t 表和 t2 表均插入相同的内容试过,没有区别
1 conn.execute("insert into t values('%s')" % '测试') #命令行下:均可执行,均正常。脚本执行:均可执行,window乱码;CentOS正常
2 conn.execute("insert into t values('%s')" % '测试'.decode('utf-8')) #命令行下:windows报错;CentOS可执行。脚本执行:可执行,均正常
3 #conn.execute("insert into t values('%s')" % '测试'.encode('utf-8')) #命令行下:均报错。脚本执行:同命令行
4 conn.execute("insert into t values('%s')" % u'测试')
5 #conn.execute("insert into t values('%s')" % u'测试'.decode('utf-8')) #命令行下:均报错。脚本执行:均报错
6 conn.execute("insert into t values('%s')" % u'测试'.encode('utf-8')) #命令行下:均可执行,但是windows乱码;CentOS正常。脚本执行:同命令行
7 conn.execute("insert into t values('%s')" % '\u6d4b\u8bd5') #命令行下:均可执行,但其实均是一个字符串,实际结果为:'\\u6d4b\\u8bd5'
8 conn.execute("insert into t values('%s')" % '\u6d4b\u8bd5'.decode('utf-8')) #同7,因为decode针对的是字母和数字及\,结果肯定一样
9 conn.execute("insert into t values('%s')" % '\u6d4b\u8bd5'.encode('utf-8')) #同7
10 conn.execute("insert into t values('%s')" % u'\u6d4b\u8bd5')
11 #conn.execute("insert into t values('%s')" % u'\u6d4b\u8bd5'.decode('utf-8')) #同5
12 conn.execute("insert into t values('%s')" % u'\u6d4b\u8bd5'.encode('utf-8')) #同6
13 conn.execute("insert into t values('%s')" % '\xb2\xe2\xca\xd4') #命令行下:均可执行,windows下正常;CentOS下为不可见字符。脚本执行:同命令行
14 #conn.execute("insert into t values('%s')" % '\xb2\xe2\xca\xd4'.decode('utf-8')) #命令行下:均报错。脚本执行:同命令行
15 #conn.execute("insert into t values('%s')" % '\xb2\xe2\xca\xd4'.encode('utf-8')) #同3
16 #conn.execute("insert into t values('%s')" % u'\xb2\xe2\xca\xd4') #命令行下:windows下报错;CentOS下可执行但乱码。脚本执行:
17 #conn.execute("insert into t values('%s')" % u'\xb2\xe2\xca\xd4'.decode('utf-8')) #同5
18 conn.execute("insert into t values('%s')" % u'\xb2\xe2\xca\xd4'.encode('utf-8')) #命令行下:均可执行,但都是乱码。脚本执行:同命令行
conn.commit()
conn.close()