楼主:
ReTryx 2022-11-03 15:46:33想请教各位高手们有没有遇到如标题的问题过?google完也试过网络上的解法,都无法成
功。
以下是环境以及问题
我用pymssql 连 mssql, 在连线的时候一定要把charset 也写进去,不然会出现错误,而
我charset 是用CP950
接着在insert中文进SQL后,在SQL里面看会发现insert进去的都是乱码。但如果用Python
再select 出来却会是中文。
但如果是SQL里面本来就是中文的资料,从Python select 出来就也会变成乱码在Python
上,同样的,用Python 写进去变成乱码的中文由其他语言读出来也会是乱码。
简单来说就是Python写进去的中文乱码只能由Python 自己读来才能解码成中文。而本来
在DB里就是中文的资料Python 读出来就会变成乱码。
我试过用encode and decode,但还是无解。请问有人成功试过从中文从Python写进MSSQL
里面不会变成乱码的吗?
感谢帮忙
程式码
conn = pymssql.connect(server = '', user = '', password =
'', database = '', charset='CP950')
.
.
.
cur.execute(f"Insert into dbo.ABC values ('中文', '中文二', '中文三')")
conn.commit()
以上charset如果省略不填则无法连线
作者:
surimodo (好吃棉花糖)
2022-11-03 16:31:00把完整程式码贴出来
作者:
Hsins (翔)
2022-11-03 17:52:00你忽略了很多情境的叙述,无法判断是哪边出问题。听起来比较像是你原先已经在里面的中文,跟你选用的字符集
作者:
Hsins (翔)
2022-11-03 17:55:00并不一致除此之外,你也要检查一下编辑器的编码
会使用 CP950 我猜是用 CMD 命令提示字符
楼主:
ReTryx 2022-11-04 09:42:00我是用Spyder IDE, 默认编码是UTF-8charset如果改用UTF-8则也是无法连线所有东西都用默认,用C, js or vba写中文进SQL就都没问题就是python进SQL中文有问题,也读不了上述语言写进的中文
作者:
Hsins (翔)
2022-11-04 12:14:00他有提到原本有存中文, 应该不是 varchar/nvarchar 的差异比较可能是 encode 和 decode 没做好你尝试的 encode 跟 decode 是怎么操作的?
什么叫作 charset 设成 UTF-8 就无法连线如果你的中文是写在档案内,档案本身是 UTF-8 编码吗
楼主:
ReTryx 2022-11-04 13:57:00datatype已经是nvarchar了a = '中文'.encode('utf-8').decode('utf-8')Python档案里面本身是utf-8没错 # -*- coding: utf-8 -*-也试过把decode encode交叉互换成big5也都是不行
作者:
Hsins (翔)
2022-11-04 14:22:00实话说,你可能没搞清楚 encode 跟 decode 在干嘛,另外是上下文提供的不够明确跟精准
楼主:
ReTryx 2022-11-04 14:26:00我再来研究一下编码 感谢各位~
......你先把中文字串 print 出来看看是不是正确的
楼主:
ReTryx 2022-11-06 16:26:00Python 中print 出来是正确的,但SQL里跟用其他语言print出来是乱码