鱼C论坛

 找回密码
 立即注册
查看: 47|回复: 8

使用pymssql连接中文数据库时总是报'ascii' codec can't encode

[复制链接]
最佳答案
0 
发表于 2018-12-6 23:32:19 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
import pymssql as pys
host='XX.X.XX.XXX'
uid='XX_XXX'
psd='123456'
db='数据系统'
conn=pys.connect(host=host,user=uid,password=psd,database=db,charset='cp936')
cur=conn.cursor()
msql='select * from sysobjects'
cur.execute(msql)
rel=cur.fetchall()

当db为英文数据库名称时,没有问题;当db为中文数据库名称时,总是报错,python版本是3.6.1;如下所示:
Traceback (most recent call last):
  File "C:\Users\liping_xie\Desktop\STM - 副本.py", line 12, in <module>
    conn=pys.connect(host=host,user=uid,password=psd,database=db,charset='utf8')
  File "src\pymssql.pyx", line 636, in pymssql.connect
  File "src\_mssql.pyx", line 1957, in _mssql.connect
  File "src\_mssql.pyx", line 653, in _mssql.MSSQLConnection.__init__
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-5: ordinal not in range(128)
请教论坛各路大神,请问该如何设置才能不报错呢?非常感谢!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
最佳答案
69 
发表于 2018-12-7 00:08:53 From FishC Mobile | 显示全部楼层
可能是你的mysql数据库一开始的时候没有设定utf-8编码。
进入mysql查一下数据库编码吧

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
最佳答案
6 
发表于 2018-12-7 07:52:15 | 显示全部楼层
试试看 charset='utf8'
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
最佳答案
1 
发表于 2018-12-7 09:32:20 | 显示全部楼层
db还能有中文名字的啊。。第一次见诶。问题出在db是中文,我猜你只要把这个中文转下编码就行了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
最佳答案
0 
 楼主| 发表于 2018-12-7 09:41:49 | 显示全部楼层
zyj321321312 发表于 2018-12-7 09:32
db还能有中文名字的啊。。第一次见诶。问题出在db是中文,我猜你只要把这个中文转下编码就行了

公司数据库木有办法。。。按照网上教的查看数据库编码是936,小白不懂怎么转码,请教db中文怎么转呢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
最佳答案
0 
 楼主| 发表于 2018-12-7 09:43:03 | 显示全部楼层

试过了,还是报错。。跟使用cp936一样
Traceback (most recent call last):
  File "C:\Users\xiaohu_li\Desktop\STM.py", line 12, in <module>
    conn=pys.connect(host=host,user=uid,password=psd,database=db,charset='utf8')
  File "src\pymssql.pyx", line 636, in pymssql.connect
  File "src\_mssql.pyx", line 1957, in _mssql.connect
  File "src\_mssql.pyx", line 653, in _mssql.MSSQLConnection.__init__
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-5: ordinal not in range(128)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
最佳答案
0 
 楼主| 发表于 2018-12-7 09:46:02 | 显示全部楼层
charset='utf8'时,中文数据库名还是不行,英文数据库名没有问题,查询的结果中文乱码
改为 charset=‘cp936’后,英文数据库名也没有问题,查询的结果中文可以正常显示,不过中文数据库名仍然报错

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
最佳答案
0 
 楼主| 发表于 2018-12-7 09:48:55 | 显示全部楼层
wongyusing 发表于 2018-12-7 00:08
可能是你的mysql数据库一开始的时候没有设定utf-8编码。
进入mysql查一下数据库编码吧

数据库编码按照网上的方法
SELECT  COLLATIONPROPERTY('Chinese_PRC_Stroke_CI_AI_KS_WS', 'CodePage')
输出为936,所以设置的charset=‘cp936’.....设置成utf8后连英文数据库名查询结果中的汉字都是乱码。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
最佳答案
1 
发表于 2018-12-7 10:08:19 | 显示全部楼层
才发现是pymssql,sqlserver数据库没用过。mysql数据库的话即便中文好像也没什么问题。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

小甲鱼强烈推荐上一条 /1 下一条

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号

GMT+8, 2018-12-16 06:27

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表