参考文章:
https://www.w3schools.com/php/func_mysqli_set_charset.asp
http://php.net/manual/zh/mysqli.set-charset.php
http://php.net/manual/zh/mysqlinfo.concepts.charset.php
环境:
centOS7
mariadb10.2.7
php5.4.16
PHP文件:
test.php
1 <?php 2 $dbc = mysqli_connect("localhost", "root", "123456", "elvis_store") or die("数据库连接失败"); 3 4 $sql = "INSERT into email_list values ('测试','中文','test@126.com');"; 5 6 $result = mysqli_query($dbc,$sql) or die("数据插入失败"); 7 mysqli_close($dbc); 8 9 echo "数据添加成功"; 10 ?>
运行后,提示插入成功。进入mariadb控制台查询,显示乱码。
(如果插入不成功,问题可能在mariadb的设置上,见文章:mariaDB中文乱码 的解决办法)
但是直接在mariadb控制台直接插入数据无乱码。
分析问题原因在php上
解决:
mysqli_set_charset — 设置默认字符编码
1 <?php 2 $dbc = mysqli_connect("localhost", "root", "123456", "elvis_store") or die("数据库连接失败"); 3 4 $sql = "INSERT into email_list values ('测试','中文','test@126.com');"; 5 6 mysqli_set_charset($dbc,"utf8"); 7 8 $result = mysqli_query($dbc,$sql) or die("数据插入失败"); 9 mysqli_close($dbc); 10 11 echo "数据添加成功"; 12 ?>
在sql运行前设置默认字符编码。
问题解决。