|本文来自:ITPUB博客
最近在将数据从Oracle迁移到MySQL的过程中,遇到一些问题,其中就包括中文字符显示乱码。
数据导入成功之后,中文字段内容无法正常显示。后来才发现客户端的字符集设置是对的,服务器端的字符集设置不支持中文字符。后来经过测试发现,我们可以通过三种方法解决这个问题,按照从低到高的级别分别是:
表级
数据库级
服务器级
1.测试环境Windows Server 2008 r2 MySQL Community Server (GPL) 5.7.16
我是在Windows Server 2008 r2环境下进行测试,创建了测试数据库hoegh。
我们看到hoegh数据库的默认字符集是latin1。
2.create table设置DEFAULT CHARSET参数
首先我们创建测试表hoegh,分别向表中插入一条英文信息和中文信息。
我们发现包含中文的记录插入失败,通过show create table语句可以看到表的默认字符集为latin1,不支持中文。
接下来,我们重建测试表hoegh并设置DEFAULT CHARSET为utf8,然后向表中插入一条英文信息和中文信息。
我们看到插入过程没有报错,也能正常查询。
3.create database设置CHARACTER SET参数
我们重建测试库hoegh,并设置CHARACTER SET参数。然后,重建测试表hoegh并插入两条记录。
我们看到插入过程没有报错,也能正常查询。
此时,为了方便对比,我们查看一下系统的字符集参数。
我们看到character_set_server参数为latin1,这表明当前服务器端的字符集为latin1。接下来,我们就通过修改参数文件来修改这个参数。
4.配置my.ini中的character_set_server参数
通过直接配置my.ini方式修改mysql的服务器端字符集,这样就可以一劳永逸。首先我们找到配置文件,在里面添加一行记录——character-set-server=utf8。
default-character-set=utf8
[mysqld]
max_connections=200
default-storage-engine=INNODB
basedir =E:\mysql-5.7.16-winx64\bin
datadir =E:\mysql-5.7.16-winx64\data
port = 3306
autocommit=0
character-set-server=utf8
需要注意的是,上述配置中default-character-set=utf8是针对客户端的设置,而character-set-server=utf8是针对服务器端的设置。接下来,我们重启一下MySQL服务,查看数据库的字符集参数。
我们看到character_set_server已经成功设置为utf8。然后我们重建测试数据库hoegh,并重复之前的建表语句。
我们看到一切正常,搞定!最后强烈建议大家使用utf8!号称万国码!
我知道一种学习
○
于坚