Ubuntu 中 Mysql 中文存储乱码设置问题

Mysql 存储中文乱码的解决方法。

之前是在CentOS上用着mysql,关于CentOS上mysql的中文设置很简单。将mysql的配置文件按如下修改后重启mysql服务,之后中文数据便能的存入去处了。

1
2
3
4
5
6
7
8
9
## CentOS6.6 在配置文件增加以下设置即可
## file /etc/my.cnf

[mysqld]
default-character-set=utf8
init_connect='SET NAMES utf8'

[client]
default-character-set=utf8

但今天要在Ubuntu16.04上安装一下mysql,同样中文数据不正常。在Ubuntu上查看mysql的字符变量如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
mysql> show variables like "%char%";
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | latin1 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | latin1 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)

我首先就照着CentOS方式改了一下my.cnf配置文件,但是重点是mysql重启不起来了。这就尴尬了。百度了半天找到一篇文章Ubuntu的MySQL中文乱码问题—自己躺坑,终于知道为什么了。Ubuntu的设置方法如下:

1
2
3
4
5
6
7
8
## Ubuntu 16.04 在配置文件增加以下设置即可
## file /etc/mysql/my.cnf
[client]
default-character-set=utf8
[mysqld]
character-set-server=utf8 # default-character-set 是不对的
[mysql]
default-character-set=utf8

如此修改后mysql的服务便能顺利重启,中文也能正确存取了。

但是,当我在主机屋玩了一下免费空间后,同样的问题来了。但是这次你没办法去改配置,重启服务,你连数据库都创建不了,只能用给你已经创建好的一个指定名的数据库。当我把数据导入后,同样查出的中文是??。这次只能改代码的。基于上次对配置的修改,数据库连接的代码修改后如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
function connect_to_mysql()                                                     
{
$conn=Null;
$dsn = "mysql:host=localhost;dbname=workScheduleDB";
$username = "panderan";
$password = "panderan";
try {
$conn = new PDO($dsn, $username, $password);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
echo "Connection failed:" . $e->getMessage();
}
$conn->query('set NAMES \'utf8\';'); #增加行
$conn->query('set character_set_database=\'utf8\';'); #增加行
$conn->query('set character_set_server=\'utf8\';'); #增加行
return $conn;
}