第一種方法,總結:
經常更換虛擬主機,而各個服務商的MYSQL版本不同,當導入數據后,總會出現亂碼等無法正常顯示的問題,查了好多資料,總結出自己的一點技巧:
WINDOWS 下導入應該這樣使用MYSQL的命令在DOS命令下進入mysql的bin目錄下,輸入mysql -uroot -p密碼 數據庫名稱<要恢復的數據庫, 例如我們要把D盤的一個名稱為test.sql的數據庫恢復到本地的test2這個數據庫,那么就這樣: mysql -uroot -p密碼 test2以前的國外主機用的Mysql是4.x系列的,感覺還比較好,都無論GBK和UTF-8都沒有亂碼,沒想到新的主機的Mysql是5.0版本的,導入數據后,用php讀出來全是問號,亂碼一片,記得我以前也曾經有過一次切換出現亂碼的經驗,原因肯定是Mysql版本之間的差異問題。只好查資料,發現了一個解決方法,就是在mysql_connect后面加一句SET NAMES UTF8,即可使得UTF8的數據庫消除亂碼,對于GBK的數據庫則使用SET NAMES GBK,代碼如下:$mysql_mylink = mysql_connect($mysql_host, $mysql_user, $mysql_pass);mysql_query("SET NAMES 'GBK'");數據庫字符集為utf-8
連接語句用這個mysql_query("SET NAMES 'UTF8'");mysql_query("SET CHARACTER SET UTF8");mysql_query("SET CHARACTER_SET_RESULTS=UTF8'");
還有個方法就是,如果你自己的機器的話,可以更改MYSQL字符集,一般在MYSQ4和MYSQL5這兩個版本中有效
第二個方法:很不錯的解說,可以試一下
mysql亂碼處理總結: (1)java中處理中文字符正常,在cmd client中顯示亂碼是字符集的問題. (2)字段長度設置夠長,但插入中文字符時提示com.mysql.jdbc.MysqlDataTruncation: Data truncation: Data too long for column錯誤是字符集的問題. (3)亂碼問題歸根到底是字符集的問題,那就從字符集設置方面考慮,不外乎下面幾個方面:server,client,database,connection,results.-------------------------解決辦法----------------------(1)修改 my.ini(MySQL Server Instance Configuration 文件)# CLIENT SECTION[client]port=3306[mysql]default-character-set=gbk# SERVER SECTION[mysqld]default-character-set=gbk(2)修改data目錄中相應數據庫目錄下的db.opt配置文件default-character-set=gbkdefault-collation=gbk_chinese_ci(3)數據庫連接串中指定字符集URL=jdbc:mysql://yourip/college?user=root&passWord=yourPassword&useUnicode=true&characterEncoding=gbk 注:在mysql4.1.0版 要加useUnicode=true&characterEncoding=gbk 如果是5.0版以上的,加不加都是沒有關系的!(4)在創建數據庫時指定字符集create database yourDB CHARACTER SET gbk;
(5)在dos命令上要設置
set names gbk
(6)安裝數據庫的時候指定字符集如指定為UTF-8的字符集,如圖:

好了,經過檢查上面四個方面的設置,應該 OK 了!不會出現諸如com.mysql.jdbc.MysqlDataTruncation: Data truncation: Data too long for column等問題.
Mysql中文亂碼解決原來常常在群里看到mysql的亂碼問題,但是由于本人一直在用Oracle和sql server所以沒多在乎,昨天用了用mysql結果就遇到了傳說中的亂碼…..。現在我們來講講mysql的亂碼問題。首先你進入的你mysql用show variables查看
這里可以查看到你的字符集,character_set_server是服務器編碼。現在我們默認的是latin1要改變服務器的編碼必須重新啟動服務器,我們先用mysqladmin –uroot shutdown關閉服務器,然后mysqld –C GBK啟動服務器 –C是character_set_server的一個簡寫(可以也可以寫成mysqld –character_set_server gbk).這樣修改以后我們再進入mysql查看就會顯示:這樣我們就把服務器和數據庫的編碼改為了GBK。現在我們就可以插入中文字符串了,但是為什么有時間還是會顯示Exception in thread "main" com.mysql.jdbc.MysqlDataTruncation: Data truncation: Data too long for column 'name' at row 1這是因為你只是修改了mysql的服務器的字符編碼,并沒有修改已經有數據庫的編碼,這時候你需要手動的把data目錄下的數據庫中的db.opt中的編碼改為default-character-set=gbkdefault-collation=gbk_chinese_ci這樣修改以后你在重啟服務器就可以插入中文了。但是這時候還有個問題就是在你應用程序當中顯示的是中文字符,但是在命令窗口還是亂碼。這時候你注意我們上面圖中的character_set_client字符還是latin1當然顯示的是亂碼咯喲。所以你進入mysql客戶端程序的時候因該把客戶端默認的編碼改為gbk才能顯示正常。你可以在mysql里修改,也可以在登陸的時候mysql –uroot –default-character-set=gbk修改如此以來就解決了中文問題了。我剛開始的時候在程序中加入了一個characterEncoding變量(下圖),但是想來想去都覺得這個變量沒什么用,所以后來去掉也能顯示正常。jdbc:mysql://127.0.0.1:3306/ee?characterEncoding=gbk"
第三種方法,說有太復雜了,反到不知道怎么弄了,你試試,也許可以用得上
1.修改/etc/my.cnf文件,改成這樣:[mysqld]datadir=/var/lib/mysqlsocket=/var/lib/mysql/mysql.sockdefault-character-set=utf8[mysql.server]user=mysqlbasedir=/var/lib[mysqld_safe]err-log=/var/log/mysqld.logpid-file=/var/run/mysqld/mysqld.pid注意:就是加入了一句default-character-set=utf8。2./etc/init.d/mysqld restart 重新啟動mysql;3.打開phpmyadmin,選擇lang為"Chines simplifies(zh-utf-8)",選擇"MySQL 連接校對"為"utf8_general_ci "點“顯示 MySQL 的運行信息”--“變量”,可以看到:character set client utf8 utf8character set connection utf8 utf8character set database utf8 utf8character set results utf8 utf8character set server utf8 utf8character set system utf8 utf8collation connection utf8_general_ci utf8_general_cicollation database utf8_general_ci utf8_general_cicollation server utf8_general_ci utf8_general_ci從這里可以看到character全部變成utf8了。有人要問,為什么都要改成utf8呢?改成GB2312不行嗎?解釋如下:我也不想改成utf8,只是phpmyadmin2.6在mysql4.1的時候只會用utf8,連其他頁面的charset也都是utf8,改成gb2312一定會亂碼,我們只能湊phpmyadmin了。只有在mysql3.23的時候,phpmyadmin才會多一個gb2312的頁面charset,這時候是正常的。3.將以前的mysql3的庫文件導入mysql4.1的庫有兩種情況:一是從phpmyadmin上導入,這時候你要注意的是在選擇庫文件的頁面左下腳有個“文件的字符集:”,默認是utf8,要改成gb2312,否則導進去亂碼;二是在linux下導入,這時候你需要先在庫文件的頭部加一行:SET NAMES 'gb2312'; 注意最后也是;號,別漏了。然后執行mysql -u用戶名 -p密碼 xxx.sql > 庫名導入完成以后再用phpmyadmin打開看,里面的中文字就是正確的。4.從mysql4.1里導出庫文件一.用phpmyadmin導出導出倒是問題不大,如果phpmyadmin的瀏覽頁面里顯示的中文是正常的,那么導出肯定也是正常的二.在linux上導出如果用mysqldump導出出現了亂碼也沒有關系,可以運行iconv來轉換一下iconv -c -f UTF-8 -t GB2312 庫文件名 > 新的gb2312的庫文件名綜上所述,你要注意:1。盡量在需要導入的庫文件的開頭加入SET NAMES 'gb2312';告訴mysql你要導入的是一個gb2312的文件;2。可能你需要這個:SET NAMES 'utf8';在登陸到mysql后用,把character的一些默認參數改到utf8上,有時可以減少一些困擾,不過也不是必須的。在mysql上使用:SHOW VARIABLES LIKE 'character_set_%';用來查看當前的狀態。3.如果出現亂碼也不要怕,一是你要注意留存原有的備份,二是用iconv來進行轉化。在正常使用之前注意做導入導出的測試,確保萬無一失。我升級了MYSQL到4.1.2,phpmyadmin用的是2.6.2。數據表里面有中文的字段中文都變成了亂碼,導出數據也是亂碼。我用以前的2.5.7沒有問題,想問一下,應該在phpmyadmin的那個文件里改哪個設置一下才能顯示出來的是正常的中文字?和字符相關的變量中這幾個和sql很有關系:character_set_clientcharacter_set_connectioncharacter_set_results此外就是數據庫中對相應字段設置的charact set,如果沒有對字段設置,缺省是table的charact set,table也沒有指定則缺省使用database的。上面3個變量的作用是這樣的,client表示客戶端發送過來的字符集,results表示發送到客戶端的字符集(這兩個分開是因為發送過來和發送過去的不一定是同一個客戶端),connection則在客戶端和數據庫起一個連接作用。具體是這樣:比如我在mysql命令行設置client為gbk,connection為utf8,results為gbk,數據庫為big5,當我發送一個insert語句的時候,這個語句作為gbk代碼,先轉為utf8代碼(connection),再轉為big5(database)插入數據庫。而運行一個select語句的時候,從數據庫得到的結果則相反的過程,由big5轉為utf8,再轉為gbk,你得到gbk的結果。因此最主要的是讓client和results和你使用的客戶端一致。比如你的網頁是utf8編碼,你就要設置這兩個為utf8。而在mysql命令行的時候,我用的是2000,需要設置為gbk而我們用的set names XXX,實際上就是同時設置這3個變量為XXX。在這樣的情況下,我們可以把一個數據庫中的不同表或不同字段設為不同的字符集,只要上面3個設置正確,就可以在數據庫中同時使用不同的字符集。注意要保證你的數據庫中的字符已經使用了正確的字符集,比如如果一開始你設置錯誤,插入數據后,本身數據的編碼就是不正確的,然后即使設置改回來,也不可能得到正確的顯示了。
希望對大家有所幫助
新聞熱點
疑難解答