问题解决笔记 -- LINUX 服务器 PHP与MYSQL中文乱码问题最终解决方案

时间:2023-02-10 11:50:00

笔者用的服务器为Ubuntu,当要往MYSQL插入中文时,碰到了乱码问题。

问题解决方案如下

一、MYSQL设置问题

经过搜索,普遍解决方案如下(视MYSQL版本为5.5之后)

修改/etc/mysql/my.cnf  

sudo gedit /etc/mysql/my.cnf  
在my.cnf文件中的[client]段和 [mysqld]段加上以下两行内容:  
[client]  
default-character-set = utf8
[mysqld]  
character-set-server = utf8

重新启动MySQL:

sudo /etc/init.d/mysql restart 
或 service mysql restart
  

查看一下现在mysql的编码  

mysql -u root -p
mysql>show variables like 'character%';  


如果修改后,显示如下,则修改成功

+--------------------------+----------------------------+  
| Variable_name | Value |  
+--------------------------+----------------------------+  
| character_set_client | utf8 |  
| character_set_connection | utf8 |  
| character_set_database | utf8 |  
| character_set_filesystem | binary |  
| character_set_results | utf8 |  
| character_set_server | utf8 |  
| character_set_system | utf8 |  
| character_sets_dir | /usr/share/mysql/charsets/ |  

注意MYSQL5.5后,mysqld下面的一句,跟client下的不同。

基本的解决方案如下,经过修改后,发现在php进行相应的数据库操作后仍出现中文乱码,多次百度修改仍然无果。

二、PHP编码设置问题

于是经过摸索,得出以下的解决方案

在php下使用mysqli函数

在进行数据库操作前,要加上一句,

$conn = mysqli_connect($servername, $username, $password, $dbname);
if (!$conn) {
die("Connection failed: " . mysqli_connect_error());
}
mysqli_query($conn,"SET NAMES 'UTF8'");//在进行数据库操作前加上这句

如果用mysql函数,则加上这句

mysql_query("SET NAMES 'UTF8'");//在进行数据库操作前加上这句

于是问题得以解决。当然,其他的编码参数要设置正确,加上以上这句编码设置语句才能生效。


三、LINUX编码问题

如果以上设置完后,仍然没法显示中文,那么如果是在Windows下编写的文件,那么

拷贝到Linux下的时候,则要注意编码问题

用Notepad++ 打开相应的文件,双击右下角的Dos\Windows,选择转为Unix格式

这样子,问题就得到解决了。