mysql数据库中文乱码问题,修改mysql字符集(Linux Windows)

来源:互联网 发布:虚拟机ubuntu怎样重置 编辑:程序博客网 时间:2024/04/30 14:48
安装完的MySQL的默认字符集为 latin1 ,为了要将其字符集改为用户所需要的(比如utf8),就必须改其相关的配置文件;由于linux下MySQL的默认安装目录分布在不同的文件下;不像windows一样放在同一目录下,只需修改其中的my.ini文件,重起后就生效了;所以先来看看linux下MySQL的数据库文件、配置文件和命令文件分别在不同的目录 :
Linux:
1、数据库目录,其所创建的数据库文件都在该目录下
  /var/lib/mysql/

2、配置文件 (mysql.server命令及配置文件所在地)
  /usr/share/mysql

3、相关命令(如mysql mysqladmin等)
  /usr/bin
4、启动脚本(如mysql启动命令)
  /etc/rc.d/init.d/

查看默认字符集
#mysql -u root - p
#(输入密码)
mysql> show variables like 'character_set%';
+--------------------------+----------------------------+
| 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/ |
+--------------------------+----------------------------+

修改字符集修改 /etc/my.cnf文件
#/etc/my.cnf[client]default-character-set=utf8[mysqld]datadir=/var/lib/mysqlsocket=/var/lib/mysql/mysql.sockuser=mysql# Disabling symbolic-links is recommended to prevent assorted security riskssymbolic-links=0#default-character-set=utf8character-set-server=utf8init_connect='SET NAMES utf8'[mysql]no-auto-rehashdefault-character-set=utf8[mysqld_safe]log-error=/var/log/mysqld.logpid-file=/var/run/mysqld/mysqld.pid

切记:在mysqld中加入的是character-set-server=utf8 而不是 default-character-set=utf8
否则会报:Starting MySQL...The server quit without updating PID file [失败]lib/mysql/localhost.localdomain.pid).异常

重起MySQL服务器,使其设置的内容生效

#/etc/init.d/mysql restart

Windows:

在根目录下面有几个已经写好的"my-"开头的ini文件,选一个适合你的,如:my-small.ini。复制一份,将文件名修改为my.ini,添加以下内容:

Properties代码  收藏代码
  1. [mysqld]  
  2. #设置字符集为utf8  
  3. default-character-set = utf8  
  4. basedir = C:/mysql-5.5.10-win32  
  5. datadir = C:/mysql-5.5.10-win32/data  
  6.   
  7. [client]  
  8. #设置客户端字符集  
  9. default-character-set = utf8  
  10.   
  11. [WinMySQLadmin]  
  12. Server = C:/mysql-5.5.10-win32/bin/mysqld.exe  


打开命令提示符,进入%MYSQL_HOME%/bin目录,执行命令:mysqld -install将mysql安装到windows的服务。执行成功后会提示:C:\mysql-5.5.10-win32\bin>Service successfully installed.
如果想要卸载服务执行命令:mysqld -remove

然后在命令提示符下执行:net start mysql就能启动mysql了,停止服务输入命令:net stop mysql。如果想设置mysql是否自动启动,可以在开始菜单->运行中输入service.msc打开服务管理进行设置。

第一次登录的时候输入:

C:\Users\Administrator>mysql -u root

修改密码:

mysql> update mysql.user set password=PASSWORD('root') where User='root'
mysql> flush privileges

不过我在安装过程中还是出了点小问题,启动mysql的时候报错:

系统出错。

发生系统错误 1067。

进程意外终止。

打开%MYSQL_HOME%/data目录下的用户名.err文件,mysql的错误日志就记录在这个文件中。在里面发现这样一句话:

110327  0:12:02 [ERROR] MySQL: unknown variable 'default-character-set=utf8'

感觉很奇怪,以前一直都这样安装的。最后在mysql的官网上找到一篇中国DBA的求助信息,原来这是新版本的一个bug,不支持在my.ini中直接设置字符集为utf8。解决办法是:在default-character-set=utf8前面加上loose-即:
Properties代码  收藏代码
  1. [mysqld]  
  2. #设置字符集为utf8  
  3. loose-default-character-set = utf8  
  4.   
  5. [client]  
  6. #设置客户端字符集  
  7. loose-default-character-set = utf8  


启动果然不再报错了。。。那份求助信息的原文地址:
http://forums.mysql.com/read.php?103,189835,237318

后记:

虽然使用上面的方式加入loose-以后,mysql启动不再报错了。但是在插入数据时依然出现了乱码问题,给我造成了不小的麻烦。
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       | C:\mysql-5.5.10-win32\share\charsets\ |
+--------------------------+---------------------------------------+
可以看出character_set_database ,character_set_server 的编码还是默认的latin1。

在[mysqld]配置选项下添加character-set-server = utf8,重启服务进入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       | C:\mysql-5.5.10-win32\share\charsets\ |
+--------------------------+---------------------------------------+

问题完美解决

0 0