MySQL中文乱码:解决之道(mysql中文显示乱码)

MySQL中文乱码是一个相对常见的问题,会使得所有的文本数据在显示的时候都乱成了一团糟。为了解决MySQL中文乱码,我们可以采取一些措施解决这个问题:

1.确定MySQL表编码:由于MySQL中文乱码主要是由于表编码与字符编码不一致导致, 因此我们要使用正确的编码,通过如下方式确定表编码:

mysql> SHOW TABLE STATUS WHERE Name=’table_name’;

+————+——–+———+————+——-+—————-+————-+—————–+————–+———–+—————-+———————+

| Name | Engine | Version | Row_format | Rows | Avg_row_length | Data_length | Max_data_length | Index_length | Data_free | Auto_increment | Create_time |

+————+——–+———+————+——-+—————-+————-+—————–+————–+———–+—————-+———————+

| table_name | MyISAM | 10 | Dynamic | 10000 | 254 | 2516584 | 0 | 65536 | 0 | 100 | 2018-10-01 10:50:37 |

+————+——–+———+————+——-+—————-+————-+—————–+————–+———–+—————-+———————+

1 row in set (0.00 sec)

mysql> SHOW CREATE TABLE table_name;

+————+—————————————————————————————————————————————————————————————————————-+

| Table | Create Table |

+————+—————————————————————————————————————————————————————————————————————-+

| table_name | CREATE TABLE `table_name` (

`id` int(11) unsigned NOT NULL AUTO_INCREMENT,

`name` varchar(50) NOT NULL DEFAULT ”,

`age` int(11) DEFAULT NULL,

PRIMARY KEY (`id`)

) ENGINE=MyISAM AUTO_INCREMENT=100 DEFAULT CHARSET=utf8 |

+————+—————————————————————————————————————————————————————————————————————-+

1 row in set (0.00 sec)

从上面的查询结果可以看出表编码为utf8,由此说明MySQL表编码应该统一,与字符编码一致。

2.正确设置字符编码:在查看MySQL表编码后,我们开始设置字符编码,有以下几种常用的编码,其中GBK与GB2312是同一种编码:

GBK

GB2312

UTF-8

BIG5

可以通过如下方式设置字符编码:

mysql> SET NAMES ‘utf8’

Query OK, 0 rows affected (0.00 sec)

另外,我们还可以在my.cnf文件中添加如下配置来指定数据库字符集:

[client]

default-character-set=utf8

[mysqld]

character-set-server=utf8

collation-server=utf8_general_ci

init_connect=’SET NAMES utf8′

之后,MySQL中文乱码问题就可以解决了。


数据运维技术 » MySQL中文乱码:解决之道(mysql中文显示乱码)