笔者用的服务器为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格式
这样子,问题就得到解决了。