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; }
|