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中文乱码问题就可以解决了。