乱码是因为编码字符集不能正确显示中文,问题可能出在3个方面
1. 终端不能正确显示中文
2. mysql客户端编码字符集不支持
3. mysql服务器端编码不支持
终端
首先测试终端能不能正确显示中文,可以在终端粘贴中文来看,若不能,则在菜单栏
terminal | set charater encoding 来选择合适的编码方式
客户端
若终端能够正确显示中文,则问题出在mysql上。
先检查编码方式,查看特定的数据库、表和字段的编码方式:
SHOW CREATE DATABASE db_name;
SHOW CREATE TABLE tbl_name;
SHOW FULL COLUMNS FROM tbl_name;
再把编码方式改为可以正确显示中文的utf8
把表默认的字符集和所有字符列(CHAR,VARCHAR,TEXT)改为新的字符集
ALTER TABLE tbl_name CONVERT TO CHARACTER SET character_name [COLLATE ...]
eg. ALTER TABLE mytable CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;
只修改表的默认字符集
ALTER TABLE tbl_name [DEFAULT] CHARACTER SET character_name [COLLATE...];
修改字段的字符集
ALTER TABLE tbl_name CHANGE col1 col1 CHARACTER SET character_name [COLLATE ...];
修改数据库字符集
ALTER DATABASE db_name DEFAULT CHARACTER SET character_name [COLLATE ...];
上述修改并不会对原有的记录产生影响,只会对新插入的数据生效
另:
创建数据库、表时指定其字符集
CREATE DATABASE mydb CHARACTER SET utf8 COLLATE utf8_general_ci;
CREATETABLE IF NOT EXISTS mytable
field1 char(64) NOT NULL,
...
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
服务器
查看服务器的编码方式
mysql> status;
该命令返回服务器的当前状态信息,包括编码信息
...
Server characterset:latin1
Db characterset:latin1
Client characterset:utf8
Conn. characterset:utf8
...
可以通过修改MySQL服务器的配置文件来修改默认字符集,该修改将作用于所有的数据库
例如,fedora 20的mysql配置文件在/etc/my.cnf.d/目录下
在[client]下添加
default-character-set=utf8
在[mysqld]下添加
default-character-set=utf8
保存设置,重启mysql服务即可