第一種方法,很精闢的總結:php
常常更換虛擬主機,而各個服務商的MYSQL版本不一樣,當導入數據後,總會出現亂碼等沒法正常顯示的問題,查了好多資料,總結出本身的一點技巧: html
數據庫字符集爲utf-8 java
鏈接語句用這個
mysql_query("SET NAMES 'UTF8'");
mysql_query("SET CHARACTER SET UTF8");
mysql_query("SET CHARACTER_SET_RESULTS=UTF8'");mysql
還有個方法就是,若是你本身的機器的話,能夠更改MYSQL字符集,通常在MYSQ4和MYSQL5這兩個版本中有效linux
第二個方法:很不錯的解說,能夠試一下sql
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=gbk
default-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命令上要設置tomcat
set names gbk服務器
好了,通過檢查上面四個方面的設置,應該 OK 了!不會出現諸如
com.mysql.jdbc.MysqlDataTruncation: Data truncation: Data too long for column等問題. oracle
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=gbk
default-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/mysql
socket=/var/lib/mysql/mysql.sock
default-character-set=utf8
[mysql.server]
user=mysql
basedir=/var/lib
[mysqld_safe]
err-log=/var/log/mysqld.log
pid-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 utf8
character set connection utf8 utf8
character set database utf8 utf8
character set results utf8 utf8
character set server utf8 utf8
character set system utf8 utf8
collation connection utf8_general_ci utf8_general_ci
collation database utf8_general_ci utf8_general_ci
collation 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來進行轉化。
在正常使用以前注意作導入導出的測試,確保萬無一失。
最後加一句:http://www.quicklinux.org/原創文章,轉載請註明出處。呵呵
郵件:support@quicklinux.org
做者: MySQL 發佈日期: 2005-12-14
我升級了MYSQL到4.1.2,phpmyadmin用的是2.6.2。數據表裏面有中文的字段中文都變成了亂碼,導出數據也是亂碼。我用之前的2.5.7沒有問題,想問一下,應該在phpmyadmin的那個文件裏改哪一個設置一下才能顯示出來的是正常的中文字?
和字符相關的變量中這幾個和sql頗有關係:
character_set_client
character_set_connection
character_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個設置正確,就能夠在數據庫中同時使用不一樣的字符集。
注意要保證你的數據庫中的字符已經使用了正確的字符集,好比若是一開始你設置錯誤,插入數據後,自己數據的編碼就是不正確的,而後即便設置改回來,也不可能獲得正確的顯示了。
好了,隨便弄了下,但願對你有所幫助