mysql 亂碼問題解決終結

來源:互聯網
上載者:User

又一次成功解決Mysql亂碼問題
(MYSQL,問題,MYSQL資料庫,亂碼)

以前在我的部落格上發過文章總結我遇到的資料及網頁上中文亂碼的處理辦法[再談亂碼問題,如何解決MYSQL資料中文亂碼問題] [解決jsp,tomcat,MYSQL下中文亂碼問題] ,但是,不幸的是,今天又遇到了,用過以前的辦法,沒能解決,我相信絕對不是網頁的問題.因為,我在MYSQL裡直接添加中文的資料能在網頁上正常顯示, 可是在網頁中操作添加的資料,到MYSQL資料庫裡一看,全是???問號.我下斷點,跟蹤進去看了,程式中最後處理到資料庫操作時,還是中文,操作到資料 庫後,就是?問號了.

後來找了很多資料,終於把這個問題解決,由於能直接在MYSQL資料庫裡添加中文資料,並且能正常顯示,說明我的表都使用了正確的字元編碼,經過查看後,確認了,我全部的表以及欄位都使用了UTF-8的編碼,但是為什麼程式添加的中文資料就不行呢?

其 實,原因在於MYSQL伺服器使用的預設編碼,以及資料庫的預設編碼,很多人已經很小心的在建立表時關注表的字元編碼,卻忽略了資料庫的字元編碼,而在沒 指定資料庫的字元編碼時,建立的資料庫就使用MYSQL伺服器的預設編碼,但是,如果MYSQL伺服器的設定檔沒有指定編碼時,很可能就是使用的 latin1編碼.
查看伺服器和資料庫使用何種編碼的MYSQL命令為:SHOW VARIABLES LIKE 'character_set_%';  以及 SHOW VARIABLES LIKE 'collation_%'; 看到裡面使用的編碼了,我本應該使用的是utf8,所以,不是utf8的,那就說明問題在這裡了.

運行命令:SHOW VARIABLES LIKE 'character_set_%'; 結果如下
'character_set_client', 'utf8'
'character_set_connection', 'utf8'
'character_set_database', 'latin1'
'character_set_filesystem', 'binary'
'character_set_results', 'utf8'
'character_set_server', 'latin1'
'character_set_system', 'utf8'
'character_sets_dir', 'D:\soft_work\mysql\share\charsets\'
果然發現有幾個不對的
運行命令:SHOW VARIABLES LIKE 'collation_%'; 結果如下
'collation_connection', 'utf8_general_ci'
'collation_database', 'latin1_general_ci'
'collation_server', 'latin1_general_ci'

那怎麼辦呢,只要把那幾個的編碼改成utf8的,那應該就可以了.
1: 在Mysql的設定檔 my.ini (一般在c:/windows/下面) 裡加上伺服器的預設編碼配置: default-character-set=utf8
2: 修 改你的資料庫的字元編碼:進入Mysql資料庫,通過命令修改你的資料庫字元編碼: ALTER DATABASE `databaseName` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci  (修改後需要重啟Mysql資料庫)
3: 如果你的表以及表裡的欄位使用了不正確的字元編碼,同樣需要修正過來:命令:
 修改表的編碼: ALTER TABLE `tableName` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci
 修改欄位的編碼: ALTER TABLE `tableName` CHANGE `dd` `dd` VARCHAR( 45 ) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL
(做好了時,再跑一下上面那兩個查看字元編碼的命令,看看是否全部都變成了utf8)

4: 如 果還無效的話,再嘗試使用這個MYSQL資料庫連接字串:  jdbc:mysql://localhost:3306/xxxx?useUnicode=true&characterEncoding=UTF-8 (有時可能需要將符號(&)轉碼寫成(&))

 

==============================================================
補充材料一:
==============================================================
mysql字元編碼是版本4.1引入的,支援多國語言,而且一些特性已經超過了其他的資料庫系統。
我們可以在MySQL Command Line Client 下輸入如下命令查看mysql的字元集
mysql> SHOW CHARACTER SET;
+----------+-----------------------------+---------------------+--------+
| Charset  | Description                 | Default collation   | Maxlen |
+----------+-----------------------------+---------------------+--------+
| big5     | Big5 Traditional Chinese    | big5_chinese_ci     | 2      |
| dec8     | DEC West European           | dec8_swedish_ci     | 1      |
| cp850    | DOS West European           | cp850_general_ci    | 1      |
| hp8      | HP West European            | hp8_english_ci      | 1      |
| koi8r    | KOI8-R Relcom Russian       | koi8r_general_ci    | 1      |
| latin1   | cp1252 West European        | latin1_swedish_ci   | 1      |
| latin2   | ISO 8859-2 Central European | latin2_general_ci   | 1      |
| swe7     | 7bit Swedish                | swe7_swedish_ci     | 1      |
| ascii    | US ASCII                    | ascii_general_ci    | 1      |
| ujis     | EUC-JP Japanese             | ujis_japanese_ci    | 3      |
| sjis     | Shift-JIS Japanese          | sjis_japanese_ci    | 2      |
| hebrew   | ISO 8859-8 Hebrew           | hebrew_general_ci   | 1      |
| tis620   | TIS620 Thai                 | tis620_thai_ci      | 1      |
| euckr    | EUC-KR Korean               | euckr_korean_ci     | 2      |
| koi8u    | KOI8-U Ukrainian            | koi8u_general_ci    | 1      |
| gb2312   | GB2312 Simplified Chinese   | gb2312_chinese_ci   | 2      |
| greek    | ISO 8859-7 Greek            | greek_general_ci    | 1      |
| cp1250   | Windows Central European    | cp1250_general_ci   | 1      |
| gbk      | GBK Simplified Chinese      | gbk_chinese_ci      | 2      |
| latin5   | ISO 8859-9 Turkish          | latin5_turkish_ci   | 1      |
| armscii8 | ARMSCII-8 Armenian          | armscii8_general_ci | 1      |
| utf8     | UTF-8 Unicode               | utf8_general_ci     | 3      |
| ucs2     | UCS-2 Unicode               | ucs2_general_ci     | 2      |
| cp866    | DOS Russian                 | cp866_general_ci    | 1      |
| keybcs2  | DOS Kamenicky Czech-Slovak  | keybcs2_general_ci  | 1      |
| macce    | Mac Central European        | macce_general_ci    | 1      |
| macroman | Mac West European           | macroman_general_ci | 1      |
| cp852    | DOS Central European        | cp852_general_ci    | 1      |
| latin7   | ISO 8859-13 Baltic          | latin7_general_ci   | 1      |
| cp1251   | Windows Cyrillic            | cp1251_general_ci   | 1      |
| cp1256   | Windows Arabic              | cp1256_general_ci   | 1      |
| cp1257   | Windows Baltic              | cp1257_general_ci   | 1      |
| binary   | Binary pseudo charset       | binary              | 1      |
| geostd8  | GEOSTD8 Georgian            | geostd8_general_ci  | 1      |
| cp932    | SJIS for Windows Japanese   | cp932_japanese_ci   | 2      |
| eucjpms  | UJIS for Windows Japanese   | eucjpms_japanese_ci | 3      |
+----------+-----------------------------+---------------------+--------+
36 rows in set (0.02 sec)
更多mysql的字元集知識可以參考本論壇的
http://www.phpfans.net/bbs/viewt ... &extra=page%3D1

字 符集支援(Character Set Support)有兩個方面:字元集(Character set)和排序方式(Collation)。對於字元集的支援細化到四個層次: 伺服器(server),資料庫(database),資料表(table)和串連(connection)。
查看系統的字元集和排序方式的設定可以通過下面的兩條命令:
mysql> SHOW VARIABLES LIKE 'character_set_%';
+--------------------------+-------------------------------------------+
| Variable_name            | Value                                     |
+--------------------------+-------------------------------------------+
| character_set_client     | latin1                                    |
| character_set_connection | latin1                                    |
| character_set_database   | latin1                                    |
| character_set_filesystem | binary                                    |
| character_set_results    | latin1                                    |
| character_set_server     | latin1                                    |
| character_set_system     | utf8                                      |
| character_sets_dir       | D:\MySQL\MySQL Server 5.0\share\charsets\ |
+--------------------------+-------------------------------------------+
8 rows in set (0.06 sec)
mysql> SHOW VARIABLES LIKE 'collation_%';
+----------------------+-------------------+
| Variable_name        | Value             |
+----------------------+-------------------+
| collation_connection | latin1_swedish_ci |
| collation_database   | latin1_swedish_ci |
| collation_server     | latin1_swedish_ci |
+----------------------+-------------------+
3 rows in set (0.02 sec)

==============================================================
補充材料二: mysql字元集編碼 詳細說明
--------------------------------------------------------------
原文地址:http://www.phpfans.net/bbs/viewthread.php?tid=296&extra=page%3D1
==============================================================
mysql字元集編碼
字元集和整理
整理 描述
armscii8   (ARMSCII-8 Armenian)
armscii8_bin   亞美尼亞語,   二進位
armscii8_general_ci  亞美尼亞語,   不區分大小寫
ascii    (US ASCII)
ascii_bin   西歐 (多語言),   二進位
ascii_general_ci  西歐 (多語言),   不區分大小寫
big5    (Big5 Traditional Chinese)
big5_bin   繁體中文,   二進位
big5_chinese_ci  繁體中文,   不區分大小寫
binary    (Binary pseudo charset)
binary    二進位
cp1250    (Windows Central European)
cp1250_bin   中歐 (多語言),   二進位
cp1250_croatian_ci  克羅地亞語,   不區分大小寫
cp1250_czech_cs  捷克語,   區分大小寫
cp1250_general_ci  中歐 (多語言),   不區分大小寫
cp1251    (Windows Cyrillic)
cp1251_bin   西裡爾語 (多語言),  二進位
cp1251_bulgarian_ci  保加利亞語,   不區分大小寫
cp1251_general_ci  西裡爾語 (多語言),  不區分大小寫
cp1251_general_cs  西裡爾語 (多語言),  區分大小寫
cp1251_ukrainian_ci  烏克蘭語,   不區分大小寫
cp1256    (Windows Arabic)
cp1256_bin   阿拉伯語,   二進位
cp1256_general_ci  阿拉伯語,   不區分大小寫
cp1257    (Windows Baltic)
cp1257_bin   巴拉克語 (多語言),  二進位
cp1257_general_ci  巴拉克語 (多語言),  不區分大小寫
cp1257_lithuanian_ci  立陶宛語,   不區分大小寫
cp850    (DOS West European)
cp850_bin   西歐 (多語言),   二進位
cp850_general_ci  西歐 (多語言),   不區分大小寫
cp852    (DOS Central European)
cp852_bin   中歐 (多語言),   二進位
cp852_general_ci  中歐 (多語言),   不區分大小寫
cp866    (DOS Russian)
cp866_bin   俄語,    二進位
cp866_general_ci  俄語,    不區分大小寫
cp932    (SJIS for Windows Japanese)
cp932_bin   日語,    二進位
cp932_japanese_ci  日語,    不區分大小寫
dec8    (DEC West European)
dec8_bin   西歐 (多語言),   二進位
dec8_swedish_ci  瑞典語,   不區分大小寫
eucjpms   (UJIS for Windows Japanese)
eucjpms_bin   日語,    二進位
eucjpms_japanese_ci  日語,    不區分大小寫
euckr (EUC-KR Korean)
euckr_bin   朝鮮語,   二進位
euckr_korean_ci  朝鮮語,   不區分大小寫
gb2312    (GB2312 Simplified Chinese)
gb2312_bin   簡體中文,   二進位
gb2312_chinese_ci  簡體中文,   不區分大小寫
gbk    (GBK Simplified Chinese)
gbk_bin   簡體中文,   二進位
gbk_chinese_ci   簡體中文,   不區分大小寫
geostd8   (GEOSTD8 Georgian)
geostd8_bin   喬治亞語,   二進位
geostd8_general_ci  喬治亞語,   不區分大小寫
greek    (ISO 8859-7 Greek)
greek_bin   希臘語,   二進位
greek_general_ci  希臘語,   不區分大小寫
hebrew    (ISO 8859-8 Hebrew)
hebrew_bin   希伯來語,   二進位
hebrew_general_ci  希伯來語,   不區分大小寫
hp8    (HP West European)
hp8_bin   西歐 (多語言),   二進位
hp8_english_ci   英語,    不區分大小寫
keybcs2   (DOS Kamenicky Czech-Slovak)
keybcs2_bin   捷克斯洛伐克語,   二進位
keybcs2_general_ci  捷克斯洛伐克語,  不區分大小寫
koi8r    (KOI8-R Relcom Russian)
koi8r_bin   俄語,    二進位
koi8r_general_ci  俄語,    不區分大小寫
koi8u    (KOI8-U Ukrainian)
koi8u_bin   烏克蘭語,   二進位
koi8u_general_ci  烏克蘭語,   不區分大小寫
latin1    (cp1252 West European)
latin1_bin   西歐 (多語言),   二進位
latin1_danish_ci  丹麥語,   不區分大小寫
latin1_general_ci  西歐 (多語言),   不區分大小寫
latin1_general_cs  西歐 (多語言),   區分大小寫
latin1_german1_ci  德語 (字典),   不區分大小寫
latin1_german2_ci  德語 (電話本),   不區分大小寫
latin1_spanish_ci  西班牙語,   不區分大小寫
latin1_swedish_ci  瑞典語,   不區分大小寫
整理 描述
latin2    (ISO 8859-2 Central European)
latin2_bin   中歐 (多語言),   二進位
latin2_croatian_ci  克羅地亞語,   不區分大小寫
latin2_czech_cs  捷克語,   區分大小寫
latin2_general_ci  中歐 (多語言),   不區分大小寫
latin2_hungarian_ci  匈牙利語,   不區分大小寫
latin5    (ISO 8859-9 Turkish)
latin5_bin   土耳其語,   二進位
latin5_turkish_ci  土耳其語,   不區分大小寫
latin7    (ISO 8859-13 Baltic)
latin7_bin   巴拉克語 (多語言),  二進位
latin7_estonian_cs  愛沙尼亞語,   區分大小寫
latin7_general_ci  巴拉克語 (多語言),  不區分大小寫
latin7_general_cs  巴拉克語 (多語言),  區分大小寫
macce    (Mac Central European)
macce_bin   中歐 (多語言),   二進位
macce_general_ci  中歐 (多語言),   不區分大小寫
macroman   (Mac West European)
macroman_bin   西歐 (多語言),   二進位
macroman_general_ci  西歐 (多語言),   不區分大小寫
sjis    (Shift-JIS Japanese)
sjis_bin   日語,    二進位
sjis_japanese_ci  日語,    不區分大小寫
swe7    (7bit Swedish)
swe7_bin   瑞典語,   二進位
swe7_swedish_ci  瑞典語,   不區分大小寫
tis620    (TIS620 Thai)
tis620_bin   泰語,    二進位
tis620_thai_ci   泰語,    不區分大小寫
ucs2    (UCS-2 Unicode)
ucs2_bin Unicode  (多語言),   二進位
ucs2_czech_ci   捷克語,   不區分大小寫
ucs2_danish_ci   丹麥語,   不區分大小寫
ucs2_esperanto_ci  未知,    不區分大小寫
ucs2_estonian_ci  愛沙尼亞語,   不區分大小寫
ucs2_general_ci  Unicode (多語言),  不區分大小寫
ucs2_hungarian_ci  匈牙利語,   不區分大小寫
ucs2_icelandic_ci  冰島語,   不區分大小寫
ucs2_latvian_ci  拉脫維亞語,   不區分大小寫
ucs2_lithuanian_ci  立陶宛語,   不區分大小寫
ucs2_persian_ci  波斯語,   不區分大小寫
ucs2_polish_ci   波蘭語,   不區分大小寫
ucs2_roman_ci   西歐,    不區分大小寫
ucs2_romanian_ci  羅馬尼亞語,   不區分大小寫
ucs2_slovak_ci   斯洛伐克語,   不區分大小寫
ucs2_slovenian_ci  斯洛文尼亞語,   不區分大小寫
ucs2_spanish2_ci  傳統西班牙語,   不區分大小寫
ucs2_spanish_ci  西班牙語,   不區分大小寫
ucs2_swedish_ci  瑞典語,   不區分大小寫
ucs2_turkish_ci  土耳其語,   不區分大小寫
ucs2_unicode_ci  Unicode (多語言),  不區分大小寫
ujis    (EUC-JP Japanese)
ujis_bin   日語,    二進位
ujis_japanese_ci  日語,    不區分大小寫
utf8    (UTF-8 Unicode)
utf8_bin   Unicode (多語言),  二進位
utf8_czech_ci   捷克語,   不區分大小寫
utf8_danish_ci   丹麥語,   不區分大小寫
utf8_esperanto_ci  未知,    不區分大小寫
utf8_estonian_ci  愛沙尼亞語,   不區分大小寫
utf8_general_ci  Unicode (多語言),  不區分大小寫
utf8_hungarian_ci  匈牙利語,   不區分大小寫
utf8_icelandic_ci  冰島語,   不區分大小寫
utf8_latvian_ci  拉脫維亞語,   不區分大小寫
utf8_lithuanian_ci  立陶宛語,   不區分大小寫
utf8_persian_ci  波斯語,   不區分大小寫
utf8_polish_ci   波蘭語,   不區分大小寫
utf8_roman_ci   西歐,    不區分大小寫
utf8_romanian_ci  羅馬尼亞語,   不區分大小寫
utf8_slovak_ci   斯洛伐克語,   不區分大小寫
utf8_slovenian_ci  斯洛文尼亞語,   不區分大小寫
utf8_spanish2_ci  傳統西班牙語,   不區分大小寫
utf8_spanish_ci  西班牙語,   不區分大小寫
utf8_swedish_ci  瑞典語,   不區分大小寫
utf8_turkish_ci  土耳其語,   不區分大小寫
utf8_unicode_ci  Unicode (多語言),  不區分大小寫

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.