mysql 創建 資料庫時指定編碼很重要,很多開發者都使用了默認編碼,但是我使用的經驗來看,制定資料庫的編碼可以很大程度上避免倒入導出帶來的亂碼問題。
我們遵循的標準是,資料庫,表,欄位和頁面或文本的編碼要統一起來
很多mysql資料庫工具(除了phpmyadmin)都不支持創建時指定資料庫編碼,可以改my.ini來解決這個問題,但是需要重新啟動mysql,不過用下面的語句會更有效
GBK: create database test2 DEFAULT CHARACTER SET gbk COLLATE gbk_chinese_ci;
UTF8: CREATE DATABASE `test2` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci
注意:如果不是通過my.ini配置文件設置的內容,只在當前狀態下有效,當重啟資料庫服務後失效。所以如果想要不出現亂碼只有修改my.ini文件,資料庫編碼可以在創建資料庫時候指定UTF8,如下:
|character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | utf8 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | latin1 |
| character_set_system | utf8
『貳』 mysql資料庫語言編碼設置gbk還是utf8哪個好
gbk適合大量中文數據的情況,utf-8兼容性更強,適合絕大多數語言。目前大部分都採用utf-8編碼。希望對你有幫助。
『叄』 mysql資料庫的字元集為「GBK」,頁面顯示要求用「UTF-8」字元集,該怎麼辦
方法1:卸載你現在的mysql,把你的mysql資料庫重新安裝一次,在下圖選擇utf-8
方法2:C:ProgramFilesMySQLMySQLServer5.0--->這個是我的資料庫的安裝路徑
裡面有個my.ini這樣的文件,用記事本或者其他能打開的工具打開,我用的是EditPlus打開的,找到裡面的57行和81行這兩處修改(或者你用Ctrl+F查找你的「GBK」),把GBK替換成utf8,注意是utf8,然後保存,前提是你要有管理員許可權。然後重啟你的mysql即可,
個人推薦你用第2種方法祝你成功,給力採納喲!
『肆』 mysql資料庫表裡中文亂碼應該選哪種編碼
資料庫中關於字元集的種類有很多,個人建議,資料庫字元集盡量使用utf8(utf-8),以使你的數據能很順利的實現遷移,因為utf8字元集是目前最適合於實現多種不同字元集之間的轉換的字元集,盡管你在命令行工具上無法正確查看資料庫中的內容,我依然強烈建議使用utf8作為默認字元集.如果你想使用gb2312編碼,那麼建議你使用latin1作為數據表的默認字元集,這樣就能直接用中文在命令行工具中插入數據,並且可以直接顯示出來.而不要使用gb2312或者gbk等字元集,如果擔心查詢排序等問題,可以使用binary屬性約束 對編程有影響的主要是客戶端字元集和資料庫字元集(還有一個伺服器字元集,不知道干什麼用的), 資料庫中常用的操作就是保存數據和讀取數據,在這過程中,亂不亂碼和資料庫字元集貌似沒有什麼關系。我們只要保證寫入時選擇的字元集和讀取時選擇的字元集一致,即只需保證兩次操作的客戶端字元集一致即可。
在MySQL的客戶端上執行一次查詢的過程一般是,在客戶端的提示符後面輸入一條SQL語句,回車,然後終端顯示出查詢的結果。這個過程中,只有終端和三個MySQL的系統變數指定了正確的字元集,才能保證我們將一個正確的SQL語句送到伺服器,然後伺服器返回正確的結果,並且在終端正確顯示。
三個MySQL的系統變數是:
1. character_set_client,終端字元集,告訴Server客戶端提交的SQL語句的編碼格式
2. character_set_connection,連接字元集,是伺服器翻譯SQL語句時用到的編碼格式
3. character_set_results,返回的結果集的字元集,是伺服器返回結果集之前把結果集轉換成的編碼格式
在MySQL終端通過執行命令 show variables like 『char%』 可以查看這幾個變數的值。這三個變數通常都設定為同一種字元集,用命令set names [charset name]就可以修改這三個變數的值。一般來說,只要你設定了能夠表示你的數據的字元集,你查詢的結果都可以在終端正確顯示。
舉個例子,使用的表t1是utf8編碼,表中的欄位c1繼承了這個編碼,表創建如下
mysql> create table t1 ( c1 text not null ) character set utf8;
用的字元是漢字「范」,gbk編碼為B7 B6,utf8編碼為E8 8C 83
用下面的SQL語句插入數據
mysql> insert into t1 values( 『范』);
a)如果終端設置為utf8,並且執行了 set names utf8,那麼插入到資料庫中的就是「范」這個字的utf8編碼,這個過程中MySQL不需要做編碼轉換。寫入資料庫的內容可以通過執行 select hex( c1 ) from t1 得到數據的十六進制編碼來驗證。
b)如果終端設置為 utf8,並且執行了set names gbk,那麼執行完這個插入操作後,寫入的二進制數據是E9 91 BC,這是「漢字「鑼」的utf8編碼。這是因為,終端輸入的「范」用的是utf8編碼,而伺服器以為終端發送過來的內容是gbk編碼,所以在向t1表中插入的時候進行了一次gbk到utf8的轉換,結果當然是錯誤的。
c)如果終端設置為gbk,並且執行了set names gbk,那麼執行完插入操作後,寫入t1的依然是「范」這個字的utf8編碼。插入過程中,終端輸入的是「范」的gbk編碼B7 B6,伺服器被告知終端發過來的SQL語句是gbk編碼(由character_set_client指定),所以在插入數據前做了一次gbk到utf8的編碼轉換。
d)如果終端設置為gbk,並且執行了set names utf8,那麼執行完插入操作後,MySQL會報出一個數據被截斷的警告。實際上,輸入終端的是「范」這個字元的gbk編碼B7 B6,而伺服器被告知客戶端發過來的SQL語句是utf8編碼,所以在執行過程中沒有做轉碼,直到插入數據的時候,發現B7 B6不符合utf8的編碼規則,給出了警告信息,實際插入的數據是3F 3F,也就是兩個問號。
查詢的時候是同樣的道理,MySQL也是根據set names設定的字元集來對返回給客戶端的結果集做相應的編碼轉換,如果轉換的結果和終端顯示的字元集一致,就能正確顯示,如果不一致就是亂碼。
結論是,只要終端的字元集和set names指定的字元集一致就可以讓MySQL在處理過程中執行正確的轉碼並且正確地顯示。
另外,如果通過程序操作MySQL資料庫, 那麼也需要事先執行set names命令來指定程序希望輸出的字元集。比如,用程序從一個utf8編碼的資料庫向另外一個gbk編碼的資料庫進行數據遷移,在選取源資料庫數據之前,需要執行set names gbk,才能取到gbk編碼的數據。
『伍』 linux伺服器上的mysql字元集里沒有GBK編碼
如果你是編譯安裝的話,你最好加上--with-charset=gbk
--with-extra-charsets=all
另外,如果你上面編譯的時候使用了--with-charset=gbk
,那麼你創建的資料庫默認就是gbk字元集,否則,需要你在創建資料庫時指定資料庫的字元集,
如:create
database
dbname
default
character
set
gbk;
『陸』 mysql中編碼是gbk,p頁面是utf-8
如果你的資料庫編碼是GB的,前台頁面也是GB的,那就在鏈接資料庫後, 加上mysql_query("set names gbk")。如果都是UTF-8的,就加上mysql_query("set names uft8")。
同是你的前台頁面的編碼保存的時候要選成UTF-8的,hearder頭部也要UTF-8的。
總結,就是從資料庫到前台展示,編碼都要保持一致,如果那裡不一致,就會出現亂碼。你好好的檢查一下。