解决MySQL插入中文乱码的问题

Mac上的情况,在java代码中向数据库中添加中文字段后,MySQLworkbench中发现显示的是问号。

是编码格式的问题,解决步骤:

  1. 在终端敲入mysql -u root -p(之前先在.bash_profile文件中添加export PATH=$PATH:/usr/local/mysql/bin/),然后输入密码就进入到MySQL中

  2. 使用 mysql>show variables like 'char%';来查看当前数据库的相关编码集,得到如下结果:

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/local/mysql-5.7.10-osx10.9-x86_64/share/charsets/ |
+--------------------------+--------------------------------------------------------+
8 rows in set (0.00 sec)

共有六处使用了字符集

类型 作用
client 为客户端使用的字符集。
connection 为连接数据库的字符集设置类型,如果程序没有指明连接数据库使用的字符集类型则按照服务器端默认的字符集设置。
database 为数据库服务器中某个库使用的字符集设定,如果建库时没有指明,将使用服务器安装时指定的字符集设置。
results 为数据库给客户端返回时使用的字符集设定,如果没有指明,使用服务器默认的字符集。
server 为服务器安装时指定的默认字符集设定。
system 为数据库系统使用的字符集设定。(不可更改)

服务器安装时的默认字符集是latin1,问题就出现在这个地方,除了System以外的五个字符集类型必须相同才能正常显示中文。client,connection,results三个与客户端相关,可以用mysql>set names utf8;进行快捷修改,database和server不可以这样。

网上的资料写的需要自定义MySQL的启动配置文件,在MySQL安装目录下找到my.ini或者my.cnf,在其中加上

[mysqld]
#修改服务器端默认字符编码格式为utf8
character-set-server=utf8
[mysql]
#修改客户端默认字符编码格式为utf8
default-character-set=utf8

然后重启服务器就可以了。

我的MySQL版本是5.7.10,发现在安装目录下并没有找到这两个文件,后来是在/usr/local/mysql/support-files目录中找到了my-default.cnf文件,在其中加了上面几行代码,复制一份到/usr/local/mysql目录下,改名为my.cnf,然后重启服务器,还是显示乱码,查看编码集还是显示的跟之前一样。说明配置文件并没有起作用。

最后是将my.cnf文件复制到了/etc目录下,重启服务器,终于能正常显示中文了。此时再查看字符集,结果如下:

mysql> show variables like 'char%';
+--------------------------+--------------------------------------------------------+
| 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/local/mysql-5.7.10-osx10.9-x86_64/share/charsets/ |
+--------------------------+--------------------------------------------------------+
8 rows in set (0.00 sec)

你可能感兴趣的:(MySQL,mysql)