Mac上的情况,在java代码中向数据库中添加中文字段后,MySQLworkbench中发现显示的是问号。
是编码格式的问题,解决步骤:
在终端敲入
mysql -u root -p
(之前先在.bash_profile
文件中添加export PATH=$PATH:/usr/local/mysql/bin/
),然后输入密码就进入到MySQL中使用 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)