到目前为止,我已经将 Sybase SQL Anywhere 12 与 Python(和 Twisted)一起使用了几个星期,我什至可以正常工作。
只剩下一个烦恼:如果我使用自定义 Python 2.7.1(这是部署平台)在 CentOS 5 上运行我的脚本,我得到的结果是 UTF-8。
如果我在我的 Ubuntu 盒子 (Natty Narwhal) 上运行它,我会在 latin1 中获取它们。
不用说,我更愿意用 Unicode 获取所有数据,但这不是这个问题的重点。 :)
两者都是 64 位盒子,都有自定义的 Python 2.7.1。使用 UCS4 和自定义构建的 unixODBC 2.3.0。
我在这里不知所措。我找不到任何相关文件。是什么让 pyodbc 或 unixODBC 在这两个盒子上表现不同?
确凿的事实:
- python :2.7.1
- 数据库:SQL Anywhere 12
- unixODBC:2.3.0(2.2.14 的行为相同),使用相同的标志自行编译
- ODBC驱动:原装Sybase。
- CentOS 5 给我 UTF-8,Ubuntu Natty Narwhal 给我 latin1。
我的 odbc.ini 看起来像这样:
[sybase]
Uid = user
Pwd = password
Driver = /opt/sqlanywhere/lib64/libdbodbc12_r.so
Threading = True
ServerName = dbname
CommLinks = tcpip(host=the-host;DoBroadcast=None)
我只是通过使用 DNS='sybase' 进行连接。
TIA!
最佳答案
我无法告诉您为什么不同,但如果您将“Charset=utf-8”添加到您的 DSN,您应该会在两台机器上获得您想要的结果。
免责声明:我在 Sybase 从事 SQL Anywhere 工程工作。
关于python - pyodbc 是如何确定编码的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5884504/