现在的位置: 首页 > 综合 > 正文

MySQL客户端查询中文显示为问号(linux)

2018年02月03日 ⁄ 综合 ⁄ 共 1791字 ⁄ 字号 评论关闭


乱码是因为编码字符集不能正确显示中文,问题可能出在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服务即可


抱歉!评论已关闭.