也不能说是完全理解了里面的逻辑和问题吧,只是目前所掌握的方法可以使得在浏览器输出和phpmyadmin里面的查看都不会产生乱码。
通过php代码链接数据库后创建一个表Worker
<?php $mysql=mysqli_connect("localhost","root","123456","mysqldb"); if(empty($mysql)){ die("mysql_connet failed:".mysqli_connect_error()); } echo ("connect to ".mysqli_get_host_info($mysql)); $sql="CREATE TABLE Worker ( EmpID INT AUTO_INCREMENT PRIMARY KEY ,EmpName varchar(50) NOT NULL , DeID INT,Title varchar(50),Salary INT)"; echo "<br/>"; if($mysql->query($sql)===TRUE) { echo "table create sucessful"; } else { echo "table create 错误".$mysql->error; } //1向表中插入数据 //2向表中插入数据 mysqli_close($mysql); echo ("<br/>关闭数据库链接");
浏览器运行结果
phpmyadmin截图
向表中插入数据
$exec="INSERT INTO Worker (EmpName,DeID,Title,Salary) values('王五',1,'职员',3500),('赵六',2,'部门经理',6500),('高七',2,'职员',2500)"; if ($mysql->multi_query($exec) === TRUE) { echo "新记录插入成功"; } else { echo "Error: "."<br>" . $mysql->error; }
报错,原因是字符串不匹配(我也不知道为啥,这个Phpstorm里面我的字符串就是utf8格式的啊)
添加一行代码,插入成功了
mysqli_query($mysql,"SET NAMES utf8"); $exec="INSERT INTO Worker (EmpName,DeID,Title,Salary) values('王五',1,'职员',3500),('赵六',2,'部门经理',6500),('高七',2,'职员',2500)";
phpmyadmin里面也是没有乱码的
输出插入的数据到浏览器看一下,也是没有乱码的
echo "<br/>"; $sql="SELECT EmpName,Title,Salary FROM Worker";//这是个命令行吧 $result=$mysql->query($sql); //循环处理表中的记录 while ($row=$result->fetch_row()) { print ($row[0]." ".$row[1]." ".$row[2]."<br/>"); } $result->free();
现在查看一下phpmyadmin里面这个Worker表的编码格式,其实是gb2312的
通过上述方法创建了表之后,如果只是需要查找表中的数据需要在查找前添加一行代码
mysqli_query($mysql,"SET NAMES utf9");
否则无法显示中文
我觉得上面的方法我没有完全搞明白吧,这相当于通过php往表中插入的数据编码格式是utf8但,数据表的格式又是gb2312,但是可以正常显示。
我尝试了在phpmyadmin里面把gb2312改成utf8,这样的情况下,在Php编辑器中不添加格式转换代码就可以直接插入中文到数据表中,但是在phpmyadmin中显示的是中文乱码。
通过下面代码给表中添加数据,会导致在Phpmyadmin中出现中文乱码,但浏览器中不会出现乱码
$exec="INSERT INTO Worker (EmpName,DeID,Title,Salary) values('王五',1,'职员',3500),('赵六',2,'部门经理',6500),('高七',2,'职员',2500)"; $sql="SELECT EmpName,Title,Salary FROM Worker";//这是个命令行吧 $result=$mysql->query($sql); //循环处理表中的记录 while ($row=$result->fetch_row()) { print ($row[0]." ".$row[1]." ".$row[2]."<br/>"); } $result->free();
有很多方法是操作MYSQL的文件配置什么的,以及操作数据库的,感觉这样会是一劳永逸的方法吧,但是我也不是太感轻易尝试修改文件什么的,经过探索和尝试,上面的方法就不要修改数据库或者表的属性什么的了,直接在插入数据之前声明插入数据的编码格式就好了,感觉也算是比较方便的做法了吧。
我把代码改成了函数风格,感觉操作方便多了,不用每次都要去搞一大段的注释什么的了。
<?php $mysql=mysqli_connect("localhost","root","123456","mysqldb"); if(empty($mysql)){ die("mysql_connet failed:".mysqli_connect_error()); } echo ("connect to ".mysqli_get_host_info($mysql)); // function droptable($mysql) { $sql="DROP TABLE Worker"; if($mysql->query($sql)===TRUE) { echo "<br/>drop tabble sucessful"; } else { echo "table drop 失败".$mysql->error; } } function creattable($mysql) { $sql="CREATE TABLE Worker ( EmpID INT AUTO_INCREMENT PRIMARY KEY ,EmpName varchar(50) NOT NULL , DeID INT,Title varchar(50),Salary INT)"; echo "<br/>"; if($mysql->query($sql)===TRUE) { echo "table create sucessful<br/>"; } else { echo "table create 错误".$mysql->error; } } function insertdata($mysql) { mysqli_query($mysql,"SET NAMES utf8"); $exec="INSERT INTO Worker (EmpName,DeID,Title,Salary) values('王五',1,'职员',3500),('赵六',2,'部门经理',6500),('高七',2,'职员',2500)"; if ($mysql->multi_query($exec) === TRUE) { echo "新记录插入成功"; } else { echo "Error: "."<br>" . $mysql->error; } } droptable($mysql); creattable($mysql); insertdata($mysql); mysqli_query($mysql,"SET NAMES utf8"); echo "<br/>"; $sql="SELECT EmpName,Title,Salary FROM Worker";//这是个命令行吧 $result=$mysql->query($sql); //循环处理表中的记录 while ($row=$result->fetch_row()) { print ($row[0]." ".$row[1]." ".$row[2]."<br/>"); } $result->free(); mysqli_close($mysql); echo ("<br/>关闭数据库链接");