⑴ 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'");