[問題] 中文寫進MSSQL變成亂碼

看板Python作者時間1年前 (2022/11/03 15:46), 1年前編輯推噓3(3023)
留言26則, 6人參與, 1年前最新討論串1/3 (看更多)
想請教各位高手們有沒有遇到如標題的問題過?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://www.ptt.cc/bbs/Python/M.1667461595.A.068.html

11/03 16:21, 1年前 , 1F
會不會是你編解碼選錯格式
11/03 16:21, 1F

11/03 16:31, 1年前 , 2F
把完整程式碼貼出來
11/03 16:31, 2F

11/03 17:52, 1年前 , 3F
你忽略了很多情境的敘述,無法判斷是哪邊出問題。
11/03 17:52, 3F

11/03 17:55, 1年前 , 4F
聽起來比較像是你原先已經在裡面的中文,跟你選用的字元集
11/03 17:55, 4F

11/03 17:55, 1年前 , 5F
charset 改用 UTF-8 就沒問題了
11/03 17:55, 5F

11/03 17:55, 1年前 , 6F
並不一致
11/03 17:55, 6F

11/03 17:55, 1年前 , 7F
除此之外,你也要檢查一下編輯器的編碼
11/03 17:55, 7F

11/03 19:00, 1年前 , 8F
會使用 CP950 我猜是用 CMD 命令提示字元
11/03 19:00, 8F
※ 編輯: ReTryx (123.51.216.154 臺灣), 11/04/2022 09:42:07

11/04 09:42, 1年前 , 9F
我是用Spyder IDE, 預設編碼是UTF-8
11/04 09:42, 9F

11/04 09:43, 1年前 , 10F
charset如果改用UTF-8則也是無法連線
11/04 09:43, 10F

11/04 09:45, 1年前 , 11F
所有東西都用預設,用C, js or vba寫中文進SQL就都沒問題
11/04 09:45, 11F

11/04 09:45, 1年前 , 12F
就是python進SQL中文有問題,也讀不瞭上述語言寫進的中文
11/04 09:45, 12F

11/04 11:11, 1年前 , 13F
把varchar轉nvarchar?
11/04 11:11, 13F

11/04 12:14, 1年前 , 14F
他有提到原本有存中文, 應該不是 varchar/nvarchar 的差異
11/04 12:14, 14F

11/04 12:14, 1年前 , 15F
比較可能是 encode 和 decode 沒做好
11/04 12:14, 15F

11/04 12:24, 1年前 , 16F
你嘗試的 encode 跟 decode 是怎麼操作的?
11/04 12:24, 16F

11/04 13:54, 1年前 , 17F
什麼叫作 charset 設成 UTF-8 就無法連線
11/04 13:54, 17F

11/04 13:56, 1年前 , 18F
如果你的中文是寫在檔案內,檔案本身是 UTF-8 編碼嗎
11/04 13:56, 18F

11/04 13:57, 1年前 , 19F
datatype已經是nvarchar了
11/04 13:57, 19F

11/04 14:06, 1年前 , 20F
a = '中文'.encode('utf-8').decode('utf-8')
11/04 14:06, 20F

11/04 14:06, 1年前 , 21F
Python檔案裏面本身是utf-8沒錯 # -*- coding: utf-8 -*-
11/04 14:06, 21F

11/04 14:07, 1年前 , 22F
也試過把decode encode交叉互換成big5也都是不行
11/04 14:07, 22F

11/04 14:22, 1年前 , 23F
實話說,你可能沒搞清楚 encode 跟 decode 在幹嘛,另外是
11/04 14:22, 23F

11/04 14:22, 1年前 , 24F
上下文提供的不夠明確跟精準
11/04 14:22, 24F

11/04 14:26, 1年前 , 25F
我再來研究一下編碼 感謝各位~
11/04 14:26, 25F

11/04 14:52, 1年前 , 26F
......你先把中文字串 print 出來看看是不是正確的
11/04 14:52, 26F
文章代碼(AID): #1ZOt7R1e (Python)
文章代碼(AID): #1ZOt7R1e (Python)