在ubuntu15.04安装了下mysql,然后想设置编码为utf8,搜索了一下网上的教程,大致是以下这样子:
mysql默认编码为latin1,使用mysql -u root -p命令进入mysql控制台
输入mysql>show variables like ‘character%’; 命令显示mysql数据库的编码.
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | latin1 |
| character_set_connection | latin1 |
| character_set_database | latin1 |
| character_set_filesystem | binary |
| character_set_results | latin1 |
| character_set_server | latin1 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
可通过修改mysql的配置文件设置默认编码,sudo vim /etc/mysql/my.cnf打开配置文件.
找到客户端配置[client] 在下面添加
default-character-set=utf8
在找到[mysqld] 添加
character-set-server=utf8
找到[mysql]添加
default-character-set=utf8
网上好多让在[mysqld]添加default-character-set=utf8的,结果会造成mysql启动错误.
完成后使用命令sudo /etc/init.d/mysql stop关闭mysql服务,使用sudo /etc/init.d/mysql start重新启动mysql服务
登录mysql后使用show variables like ‘character%’; 命令查看mysql数据库的编码.
+--------------------------+----------------------------+
| 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/ |
+--------------------------+----------------------------+
ubuntu15.04有个小的修改
不知道从哪个版本开始,配置文件已经不直接写在my.cnf文件里面了,我们打开这个文件,显示的是下面的两行代码
!includedir /etc/mysql/conf.d/
!includedir /etc/mysql/mysql.conf.d/
意思就是说包含了这两个文件夹下面的配置文件,这里就有一点变化,我们要打开/etc/mysql/mysql.conf.d/mysqld.cnf文件,找到[mysqld],然后按照最新的编码设置方式填入下面两行。
character-set-server=utf8
collation-server=utf8_general_ci
填好之后重启mysql,代码如下:
systemctl restart mysql.service
程序连接数据库的时候需要的问题
设置好上面的参数之后,我们需要用程序连接到数据库,向里面插入数据库的时候有可能还会出现乱码的情况,这时候很有可能就是你指定连接数据库的时候代码中没有指定编码格式,以python连接mysql为例:
conn = MySQLdb.connect(host='***', user='root', passwd='password', db='***', port=3306, charset='utf8')
这里最后的charset=’utf8’一定不能少,少了的话就使用的是数据库默认的latin1编码,读取的时候就会又出现乱码。
是utf8而不是UTF-8也不是utf-8
“UTF-8”是标准写法,在不区分大小写的情况下也可以写成“utf-8”。“UTF-8”也可以把中间的“-”省略,写成“UTF8”。一般程序都能识别,但也有例外(mysql就是一个例外),为了严格一点,最好用标准的大写“UTF-8”。
MySQL数据库中只能使用“utf8”,不能使用“utf-8”,这也没有说为什么,只是mysql定义的时候使用的是utf8,其实都是同一个东西,名字不同而已。
结论:只有在MySQL中可以使用“utf-8”的别名“utf8”,但是在其他地方一律使用写“UTF-8”。
本文介绍了在Ubuntu 15.04上安装MySQL后如何正确设置UTF-8编码,包括配置文件的修改、避免启动错误,以及解决程序连接数据库时可能出现的编码问题。特别指出,MySQL中应使用'utf8'而非'UTF-8'或'utf-8'来设置编码。
402

被折叠的 条评论
为什么被折叠?



