又一次成功解決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 (多語言), 不區分大小寫