php文件里设置了网页编码为utf-8
header("Content-type:text/html; charset=utf-8"); 插入数据库前设置了传递给数据库的编码为utf-8
$this->mysqli->query("set names utf8");数据库中,设置了一些字符集有关的变量
查询show variables like 'char%';后结果为
查询show variables like 'collation_%';后结果为
我用的WampServer,修改mysql配置文件my.ini,在[client]节点下添加default-character-set=utf8 ,在[mysqld]节点下添加character_set_server=utf8,然后重启musql服务
但是传到数据库里,中文字符都变成了问号。。请问应该如何设置才能解决乱码?
header("Content-type:text/html; charset=utf-8"); 插入数据库前设置了传递给数据库的编码为utf-8
$this->mysqli->query("set names utf8");数据库中,设置了一些字符集有关的变量
查询show variables like 'char%';后结果为
查询show variables like 'collation_%';后结果为
我用的WampServer,修改mysql配置文件my.ini,在[client]节点下添加default-character-set=utf8 ,在[mysqld]节点下添加character_set_server=utf8,然后重启musql服务
但是传到数据库里,中文字符都变成了问号。。请问应该如何设置才能解决乱码?
1、所有与字符集相关的设置,都不会影响到数据库中的已有数据
2、字符集相关的设置,只对设置后插入的数据生效
3、数据库是共有资源,不要轻易修改设置。以免引发其他应用的问题只要做到以下两点,就不会出现乱码问题
1、所有可能会有中文内容的字段,都需要有中文字符集的连接校对。至于是哪个字符集都无所谓(gbk、utf8、ucs2都可以)也不需要每个字段都相同
2、每次在连接数据库之后,执行一次 set name 页面字符集
所有可能会有中文内容的字段,都需要有中文字符集的连接校对,这个每太明白,是指show variables like 'collation_%';语句执行后显示的结果吗?新手刚入门,请大神不吝赐教,感谢不尽。
<?php
class MysqliHelper{
private $mysqli;
private static $host = "localhost";
private static $user = "root";
private static $pwd = "";
private static $db = "test";
public function __construct(){
$this->mysqli = new Mysqli(self::$host,self::$user,self::$pwd,self::$db);
if($this->mysqli->connect_error){
die("连接数据库失败".$this->mysqli->connect_error);
} $this->mysqli->query("set names utf8");
}
public function execute_dql($sql){
$res = $this->mysqli->query($sql) or die($this->mysqli->error);
return $res;
}
public function execute_dml($sql){
$res = $this->mysqli->query($sql) or die($this->mysqli->error);
if(!$res){
return 0;
}else{
if($this->mysqli->affected_rows>0){
return 1;
}else{
return 2;
}
}
}
}
?>
`id` int(20) NOT NULL AUTO_INCREMENT,
`username` varchar(20) DEFAULT NULL,
`password` varchar(20) DEFAULT NULL,
`email` varchar(20) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=90 DEFAULT CHARSET=latin1是latin1啊,怎么改成utf8?
drop table tb_userinfo重新创建
CREATE TABLE `tb_userinfo` (
`id` int(20) NOT NULL AUTO_INCREMENT,
`username` varchar(20) DEFAULT NULL,
`password` varchar(20) DEFAULT NULL,
`email` varchar(20) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=90 DEFAULT CHARSET=utf8其实可以不用这么做
只需修改连接校对就可以了
ALTER TABLE `tb_userinfo` CHANGE `username` `username` VARCHAR( 20 ) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL
`id` int(20) NOT NULL AUTO_INCREMENT,
`username` varchar(20) DEFAULT NULL,
`password` varchar(20) DEFAULT NULL,
`email` varchar(20) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=90 DEFAULT CHARSET=utf8;
但是使用$sql = "insert into tb_userinfo (username,password,email) values('sss李四','123456','[email protected]')";后,插入后只显示sss,如果是纯汉字的话,什么也插不进去。
感觉mysql支持中文好麻烦。可能有的地方不需要修改我也改了,不知道哪些配置是必须修改的呢?
你在 window 下,默认就是 gbk,搞成 utf-8 不是自找麻烦吗?有人说用 utf-8 是为了国际化,其实有几个洋人能看懂方块字呢?