對(duì)于mysql數(shù)據(jù)庫(kù)的亂碼問題,有兩中情況: 1. mysql數(shù)據(jù)庫(kù)編碼問題(建庫(kù)時(shí)設(shè)定)。 2. 連接mysql數(shù)據(jù)庫(kù)的url編碼設(shè)置問題。
對(duì)于第一個(gè)問題,目前個(gè)人發(fā)現(xiàn)只能通過重新建庫(kù)解決,建庫(kù)的時(shí)候,選擇UTF-8字符集。我試過修改現(xiàn)有數(shù)據(jù)庫(kù)字符集為UFT -8,但是根本不起作用,插入的中文仍然亂碼(中文顯示成:???)。重建庫(kù)時(shí)選擇字符集為UTF-8之后,中文正常顯示了。
對(duì)于第二個(gè)問題,是這樣的情況:我建庫(kù)時(shí)設(shè)置了數(shù)據(jù)庫(kù)默認(rèn)字符集為UTF-8,通過mysql workbench直接插入中文顯示完全正常。但是使用mybaits插入數(shù)據(jù)時(shí),中文顯示成了"???"這樣的亂碼。但從數(shù)據(jù)庫(kù)獲取的中文不會(huì)亂碼。跟蹤數(shù)據(jù)庫(kù)操作,SQL語(yǔ)句中的中文還是顯示正常的,但是插入到mysql數(shù)據(jù)庫(kù)后就亂碼了,于是判斷可能是數(shù)據(jù)庫(kù)連接的問題。后來在網(wǎng)上找了下資料,發(fā)現(xiàn)確實(shí)可以為mysql數(shù)據(jù)庫(kù)的連接字符串設(shè)置編碼方式,如下: jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=utf8
添加了useUnicode=true&characterEncoding=utf8參數(shù)之后,插入中文就正常了。
添加的作用是:指定字符的編碼、解碼格式。 例如:假設(shè)mysql數(shù)據(jù)庫(kù)用的是GBK編碼(也可能是其它,例如Ubuntu下就是latin1),而項(xiàng)目數(shù)據(jù)庫(kù)用的是utf-8編碼。這時(shí)候如果添加了useUnicode=true&characterEncoding=UTF-8 ,那么作用有如下兩個(gè)方面: 1. 存數(shù)據(jù)時(shí): 數(shù)據(jù)庫(kù)在存放項(xiàng)目數(shù)據(jù)的時(shí)候會(huì)先用UTF-8格式將數(shù)據(jù)解碼成字節(jié)碼,然后再將解碼后的字節(jié)碼重新使用GBK編碼存放到數(shù)據(jù)庫(kù)中。 2.取數(shù)據(jù)時(shí): 在從數(shù)據(jù)庫(kù)中取數(shù)據(jù)的時(shí)候,數(shù)據(jù)庫(kù)會(huì)先將數(shù)據(jù)庫(kù)中的數(shù)據(jù)按GBK格式解碼成字節(jié)碼,然后再將解碼后的字節(jié)碼重新按UTF-8格式編碼數(shù)據(jù),最后再將數(shù)據(jù)返回給客戶端。
|
|