在資料庫的操作中,我們經常會遇到亂碼的問題,確實令人很心煩,雖然還沒有完全弄明白其中的一些原理,但是有一些經驗到是可以總結一下,指導一下後來者。
一般我們在安排嚮導中最好設定資料庫的統一編碼方式為utf-8(當然,以後在自己的工程中做到處處統一為utf8),這樣到是可以省去不少的麻煩。
當mysql嚮導配置完成後,進入資料庫,執行 show variables like '%char%',對應顯示的結果應該都對應為utf-8
650) this.width=650;" src="http://www.bkjia.com/uploads/allimg/131228/2255045312-0.png" border="0" alt="" />
但儘管如此,但我們利用command line client工具在表中插入中文的時候,會遇到data too long或者提示字串Incorrect string value的問題,導致插入失敗。
出現這個問題的原因是因為我們系統預設的編碼方式為gbk一般windows),所以對應的command line client接受的也是gbk的文本,但是mysql的connection的編碼方式為utf8,而貌似mysql沒有自動編碼轉化的功能,所以就出現不能識別的編碼問題,導致插入失敗。
解決方案就是在cmd下登陸command line client時使用:mysql -uroot -p --default-character-set=gbk; 這時在command line client下就能正常插入中文了。
同時在執行show variables like '%char%'語句時,出現了
650) this.width=650;" src="http://www.bkjia.com/uploads/allimg/131228/2255043409-1.png" border="0" alt="" />
這時發現對應幾處的編碼“暫時”實際上,再次登陸後,查詢時是沒有變化的)改變了,這表示在這種方式進入的環境下,就可以與系統預設的編碼吻合起來了,就可以正常地插入中文了。
對於不能插入的問題當然包括在匯入的操作),其中重點要關注和思考在兩個方面上,一個是用戶端面character_set_client和串連character_set_connection和返回的結果集character_set_results這其中涉及到與當前系統內容進行想到的環節,理解這其中的關係,或許就不會那麼迷茫了。
還有,如果在一些mysql的圖形化操作介面執行插入中文,則直接不會遇到這些問題,因為我們避免一個與系統有直接關係的輸入client.
這是我在遇到這個問題的一點點思考,希望能給大家一些啟發。
過去在不明白的時候,總是在網上找別人給的解決方案,總是在碰運氣,最後即便是解決了問題,但還是不明白原理,並最終又在這上面出了問題,一句話說得好,有些東西不懂遲早還是要還的。所以我覺得,如果不是很非常關鍵,靜下心來理理,把問題真正弄懂,才是最好的,也是最有成就感的。
本文出自 “花飛蝴蝶” 部落格,請務必保留此出處http://jinyabo.blog.51cto.com/3411101/1186030