作者ReTryx ()
看板Python
标题[问题] 中文写进MSSQL变成乱码
时间Thu Nov 3 15:46:33 2022
想请教各位高手们有没有遇到如标题的问题过?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如果省略不填则无法连线
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 223.140.175.156 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Python/M.1667461595.A.068.html
1F:→ tzouandy2818: 会不会是你编解码选错格式 11/03 16:21
2F:→ surimodo: 把完整程式码贴出来 11/03 16:31
3F:→ Hsins: 你忽略了很多情境的叙述,无法判断是哪边出问题。 11/03 17:52
4F:→ Hsins: 听起来比较像是你原先已经在里面的中文,跟你选用的字元集 11/03 17:55
5F:→ Schottky: charset 改用 UTF-8 就没问题了 11/03 17:55
6F:→ Hsins: 并不一致 11/03 17:55
7F:→ Hsins: 除此之外,你也要检查一下编辑器的编码 11/03 17:55
8F:推 Schottky: 会使用 CP950 我猜是用 CMD 命令提示字元 11/03 19:00
※ 编辑: ReTryx (123.51.216.154 台湾), 11/04/2022 09:42:07
9F:→ ReTryx: 我是用Spyder IDE, 预设编码是UTF-8 11/04 09:42
10F:→ ReTryx: charset如果改用UTF-8则也是无法连线 11/04 09:43
11F:→ ReTryx: 所有东西都用预设,用C, js or vba写中文进SQL就都没问题 11/04 09:45
12F:→ ReTryx: 就是python进SQL中文有问题,也读不了上述语言写进的中文 11/04 09:45
13F:→ lycantrope: 把varchar转nvarchar? 11/04 11:11
14F:→ Hsins: 他有提到原本有存中文, 应该不是 varchar/nvarchar 的差异 11/04 12:14
15F:→ Hsins: 比较可能是 encode 和 decode 没做好 11/04 12:14
16F:→ Hsins: 你尝试的 encode 跟 decode 是怎麽操作的? 11/04 12:24
17F:推 Schottky: 什麽叫作 charset 设成 UTF-8 就无法连线 11/04 13:54
18F:→ Schottky: 如果你的中文是写在档案内,档案本身是 UTF-8 编码吗 11/04 13:56
19F:→ ReTryx: datatype已经是nvarchar了 11/04 13:57
20F:→ ReTryx: a = '中文'.encode('utf-8').decode('utf-8') 11/04 14:06
21F:→ ReTryx: Python档案里面本身是utf-8没错 # -*- coding: utf-8 -*- 11/04 14:06
22F:→ ReTryx: 也试过把decode encode交叉互换成big5也都是不行 11/04 14:07
23F:→ Hsins: 实话说,你可能没搞清楚 encode 跟 decode 在干嘛,另外是 11/04 14:22
24F:→ Hsins: 上下文提供的不够明确跟精准 11/04 14:22
25F:→ ReTryx: 我再来研究一下编码 感谢各位~ 11/04 14:26
26F:推 Schottky: ......你先把中文字串 print 出来看看是不是正确的 11/04 14:52
27F:→ ReTryx: Python 中print 出来是正确的,但SQL里跟用其他语言print 11/06 16:26
28F:→ ReTryx: 出来是乱码 11/06 16:26