[C/C++]解決MySQL多國語系(中文、日文)插入時變成亂碼問題

posted in: C/C++程式設計, MySQL, Server | 0

    MySQL的亂碼問題果然兇惡…(苦笑)
    我試著插入下面的文字的結果居然都是亂碼:
    string SQL = “insert test(t) values(‘測試中文’)”;

    在網路上找教學,幾乎每篇都是說在connect之後insert之前輸入以下指令就行了:

    mysql_query(conn, "SET NAMES 'utf8'");
    

    可是我不管怎麼試都還是失敗

    後來試著去找原因,發現語系是有分client跟server二種

    雖然我的mysql DB(server)全都是用utf8建好的,可是c++中的string在IDE內的文字,只會認識local作業系統的語系(我用繁體中文,所以是big5)

    因此必需要對應好我們文件的語系:

    mysql_query(conn, "SET NAMES 'big5'");
    

    可是以上方法只能解決中文問題

    但如果我們需要插入的語句中夾雜著中文及日文及多國字時該怎麼辦呢?用上面的方法只會讓中文正確,但日文還是錯的…

    如下面的文字:
    string SQL = “insert test(t) values(‘測試中文與日本語testかなかな’)”;

    我想那是我們的編譯器無法判別哪個字元該拿什麼語系來轉才好,所以才會出現日文字都變成????

    這部份我找了好久還是找不到解決方案

    先轉wstring之後再用WideCharToMultiByte也轉成特定語系(利用code page)
    也是會發生不知道哪個字元是哪國字的情況…
    悲哀的是,MySQL的c api不支援wide string,所以這問題看似是無解了!?

    如果有路過的人知道該怎麼解決的話,請告訴我一下吧~我會非常感激的

    =================剛剛測試了一下====================

    如果是從文件讀進來的話,設置成

    mysql_query(conn, "SET NAMES 'utf8'");
    

    確實能夠正確的將多國語言插入

    看來的確是ide的問題

    所以,應用原則是:請將有多國語言混雜的語句在外面存成utf8然後再讀進來就不會有問題了

    當然,大量的資料是不可能hard code的,所以這個原則可能只會適用於少數case需求

Leave a Reply

Your email address will not be published. Required fields are marked *