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