⑴ php+mysql資料庫中文連接亂碼set names utf8 也不行!
MySQL會出現中文亂碼的原因不外乎下列幾點:
1.server本身設定問題,安裝時使用的字元集是latin1
2.table的語系設定問題(包含character與collation)
3.客戶端程式(例如php)的連線語系設定問題
正如您設定的一樣,建議使用UTF8,可兼容一切字元。以下為解決辦法:
一、避免創建資料庫及表出現中文亂碼和查看編碼方法
1、創建資料庫的時候:CREATE DATABASE `test`
CHARACTER SET 'utf8'
COLLATE 'utf8_general_ci';
2、建表的時候 CREATE TABLE `database_user` (
`ID` varchar(40) NOT NULL default '',
`UserID` varchar(40) NOT NULL default '',
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
即建庫和建表時都使用相同的編碼格式。
但是如果你已經建了庫和表可以通過以下方式進行查詢。
執行SET NAMES utf8的效果等同於同時設定如下:
SET character_set_client='utf8';
SET character_set_connection='utf8';
SET character_set_results='utf8';
二、避免導入數據有中文亂碼的問題
1:將數據編碼格式保存為utf-8
設置默認編碼為utf8:set names utf8;
設置資料庫db_name默認為utf8:
ALTER DATABASE `db_name` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
設置表tb_name默認編碼為utf8:
ALTER TABLE `tb_name` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
導入:LOAD DATA LOCAL INFILE 'C:\\utf8.txt' INTO TABLE yjdb;
2:將數據編碼格式保存為ansi(即GBK或GB2312)
設置默認編碼為gbk:set names gbk;
設置資料庫db_name默認編碼為gbk:
ALTER DATABASE `db_name` DEFAULT CHARACTER SET gbk COLLATE gbk_chinese_ci;
設置表tb_name默認編碼為gbk:
ALTER TABLE `tb_name` DEFAULT CHARACTER SET gbk COLLATE gbk_chinese_ci;
導入:LOAD DATA LOCAL INFILE 'C:\\gbk.txt' INTO TABLE yjdb;
註:1.UTF8不要導入gbk,gbk不要導入UTF8;
2.dos下不支持UTF8的顯示;
三、解決網頁中亂碼的問題
將網站編碼設為 utf-8,這樣可以兼容世界上所有字元。如果網站已經運作了好久,已有很多舊數據,不能再更改簡體中文的設定,那麼建議將頁面的編碼設為 GBK, GBK與GB2312的區別就在於:GBK能比GB2312顯示更多的字元,要顯示簡體碼的繁體字,就只能用GBK。
1.編輯/etc/my.cnf,在[mysql]段加入default_character_set=utf8;
2.在編寫Connection URL時,加上?useUnicode=true&characterEncoding=utf-8參;
3.在網頁代碼中加上一個"set names utf8"或者"set names gbk"的指令,告訴MySQL連線內容都要使用utf8或者gbk。
希望對你有所幫助。
⑵ PHP亂碼 mysql_query("set names GBK")不能解決問題
一:連接資料庫的時候就設置.
$mysqli = new mysqli($dbhost,$dbuser,$dbpass,$dbname) or die("Can not connect to the database because:".mysqli_connect_error());
//設置返回數據的字元編碼!
if (!$mysqli->set_charset("utf8")) {
printf("Error loading character set utf8: %s\n", $mysqli->error);
} else {
;//negnect
//printf("Current character set: %s\n", $mysqli->character_set_name());
}
然後:在網頁上也設置.
如第一個回答.
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
⑶ php中使用mysqli創建資料庫的時候怎麼指定字元集和排序規則
字元集很簡單,但是數據的排序需要通過SQL語句來協助完成,ORDER BY 語句,代碼如下:
//假設你已經成功茄茄連接了資料庫($mysqli變數假設為連接的資源句柄)
//通過對象方式設置字元編碼
$mysqli->set_charset('utf8');
//通過函數方式設置字元編碼
mysqli_set_charset($mysqli,'utf8');
//那麼接下來世清是數據搜納前排序的話,需要編寫一條SQL查詢語句(DESC倒序排列|ASC正序排列)
$sql="SELECT`欄位`FROM`表名`WHERETRUEORDERBY`欄位`DESC;";
如果還有什麼問題,歡迎追問~
⑷ php mysql_query("set names utf8");是什麼意思
mysql中文數據出現亂碼
資料庫採用UTF8編碼,而頁面申明編碼是GB2312,這是最常見的產生亂碼的原因。這時候在PHP腳本裡面直接SELECT數據出來的就是亂碼,需要在查詢前先使用:
mysql_query("SETNAMESGBK");或mysql_query("SETNAMESGB2312");
來設定MYSQL連接編碼,保證頁面申明編碼與這里設定的連接編碼一致(GBK是GB2312的擴展)。如果頁面是UTF-8編碼的話,可以用:
mysql_query("SETNAMESUTF8");注意是UTF8而不是一般用的UTF-8。假如頁面申明的編碼與資料庫內部編碼一致可以不設定連接編碼。
$mysql_mylink=mysql_connect($mysql_host,$mysql_user,$mysql_pass);
mysql_query("SETNAMES'GBK'");