[問題] C++/MFC 與 MySQL++ 亂碼問題

看板C_and_CPP (C/C++)作者 (Seoker)時間14年前 (2012/01/31 22:16), 編輯推噓1(1014)
留言15則, 4人參與, 最新討論串1/3 (看更多)
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) VC++ 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) MFC, Mysql++ 問題(Question): 我有一支 MFC 程式,連到 MySQL DB 讀資料 我的 MySQL Table 編碼是 utf8_unicode_ci,存了很多國語言的資料 程式讀出來後以 CString 儲存 後來我要將資料寫回去 我將讀出來的資料轉成 CStringA (因為要寫 SQL) 下 query 後,很多非英數字都變成了亂碼... 後來在連結資料庫後先下以下 query 後 亂碼的情況似乎好一些(?),但仍是有很多字消失或變成 ? 了,問題還是沒解決 SET NAMES utf8 SET CHARACTER_SET_CLIENT=utf8 SET CHARACTER_SET_RESULTS=utf8 我還試過將讀出來的東西再轉一次 UTF-8,仍是亂碼 又試過將讀出來的資料 MultiByteToWideCharCString 儲存 寫回去時再轉回來,以 CStringA 儲存,還是亂碼 (以上都有先加上 SET NAMES... 那三行) 請問版上的高手,這問題我該如何修正呢? 是否是我沒搞清楚 CString、CStringA、WideChar、...這些的差別? 程式碼(Code):(請善用置底文網頁, 記得排版) http://ideone.com/zqz8U <= 範例程式 補充說明(Supplement): -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 210.63.100.2 ※ 編輯: seoker 來自: 180.218.129.84 (01/31 22:53)

01/31 23:08, , 1F
RowData -> std::string -> MB2WC (UTF-8 -> CString
01/31 23:08, 1F

01/31 23:11, , 2F
s/CString/CStringW/
01/31 23:11, 2F

01/31 23:11, , 3F
CStringW -> WC2MB -> std::string -> query
01/31 23:11, 3F

02/01 10:05, , 4F
謝謝! 等下再來試試好了
02/01 10:05, 4F

02/01 10:05, , 5F
不過 s/CString/CStringW/ 是什麼意思呢@@?
02/01 10:05, 5F

02/01 10:13, , 6F
是說不要存成 CString,改存CStringW嗎?
02/01 10:13, 6F

02/01 10:15, , 7F
那如果我先以CStringW存,再存入CString 會有問題嗎?
02/01 10:15, 7F

02/01 10:34, , 8F
CString是中性介面,會根據你的project是否有使用unicode
02/01 10:34, 8F

02/01 10:35, , 9F
而決定它是寬字元還是ansi版
02/01 10:35, 9F

02/01 10:36, , 10F
其實我不懂為什麼要用CStringA來存...SQL有這個限制?
02/01 10:36, 10F

02/01 10:36, , 11F
去研究一下Unicode編碼方式,你就知道為什不能強制轉換
02/01 10:36, 11F

02/01 10:47, , 12F
可以在CString上go to definition
02/01 10:47, 12F

02/01 10:49, , 13F
謝謝lwecloud 我大概懂了!
02/01 10:49, 13F

02/01 10:50, , 14F
j大: 應該說,我用mysql++,他的query好像只吃CStringA
02/01 10:50, 14F

02/01 11:43, , 15F
因為mysql的API是吃UTF-8
02/01 11:43, 15F
文章代碼(AID): #1F9_VJSN (C_and_CPP)
文章代碼(AID): #1F9_VJSN (C_and_CPP)