修改mysql三处有关编码的设置

公司内的一同事(刚弄技术的)最近在学习数据库,其在建立的mysql为库里创建了一个名为student的表,结果其在插入汉字后,再通过select查询发现汉字变成了乱码 ,而英文字符正常。以下是帮其解决的步骤及对mysql编码方面的一句话总结。

一、查看数据库编码

1、查看默认字符集

mysql> SHOW VARIABLES LIKE 'character_set_%';
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | latin1 |
| character_set_connection | latin1 |
| character_set_database | latin1 |
| character_set_results | latin1 |
| character_set_server | latin1 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
7 rows in set (0.00 sec) 

2、查看排序方式

mysql> SHOW VARIABLES LIKE 'collation_%';
+----------------------+-------------------+
| Variable_name | Value |
+----------------------+-------------------+
| collation_connection | latin1_swedish_ci |
| collation_database | latin1_swedish_ci |
| collation_server | latin1_swedish_ci |
+----------------------+-------------------+
3 rows in set (0.00 sec) 

注:以上部分也可以通过status部分查到,这里对定位该问题作用并不大,这里只是把相关的命令都进行下列举。

二、查看数据库database编码及修改

1、查看database编码

通过以下命令查看

mysql> show CREATE database  test;
/*查询结果为*/
create database name character set utf8; 或
CREATE DATABASE `test` /*!40100 DEFAULT CHARACTER SET utf8 */

2、修改database编码

如果编码是默认的latin1想改为uft8 ,则可以执行下面的语句:

mysql> alter database name character set utf8; 

三、查看表tables编码及修改

1、查看table编码

mysql> show create table student;
DROP TABLE IF EXISTS `student`;
CREATE TABLE `student` (
  `id` int(11) NOT NULL,
  `name` varchar(10) DEFAULT NULL,
  `age` int(11) NOT NULL,
  `addr` varchar(20) CHARACTER SET latin1 DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

2、修改表字段编码

mysql> alter table student character set utf8; 

四、修改列col编码及修改

如第三部分tables中的语句,其中`addr` varchar(20) CHARACTER SET latin1 DEFAULT NULL 中的addr的编码就是latin1,现将其改为utf8 :

mysql>  alter table student modify addr varchar(50) CHARACTER SET utf8; 

五、客户端编码与服务端不一致时乱码

还有一种情况就是当客户端使用的编码与服务端编码不一致时,查询出的结果也会是乱码,想要看到非乱码的结果可以在执行 sql语句前加上一句:

SET NAMES 'utf8';
其相当于下面三句
SET character_set_client = utf8;
SET character_set_results = utf8;
SET character_set_connection = utf8; 

六、修改编码前旧的历史数据编码的转换

1、执行:mysqldump --opt -hlocalhost -uroot -p*** --default-character-set=lantin1 dbname > /usr/local/dbname.sql

2、将 dbname.sql文件中的create table语句的CHARSET=latin1改为CHARSET=utf8

3、在dbname.sql文件中的insert语句之前加一条"set names utf8;

4、将dbname.sql转码为utf-8格式,建议使用UltraEditor,可以直接使用该编辑器的"转换->ASCII到UTF-8(Unicode编辑)",或者将文件另存为UTF-8(无BOM)格式

5、执行:mysql -hlocalhost -uroot -p*** --default-character-set=utf8 new_dbname < /usr/local/dbname.sql




本站的发展离不开您的资助,金额随意,欢迎来赏!

You can donate through PayPal.
My paypal id: itybku@139.com
Paypal page: https://www.paypal.me/361way

分类: 数据库 标签:
  1. 本文目前尚无任何评论.
  1. 本文目前尚无任何 trackbacks 和 pingbacks.