修改mysql三处有关编码的设置
公司内的一同事(刚弄技术的)最近在学习数据库,其在建立的mysql为库里创建了一个名为student的表,结果其在插入汉字后,再通过select查询发现汉字变成了乱码 ,而英文字符正常。以下是帮其解决的步骤及对mysql编码方面的一句话总结。
一、查看数据库编码
1、查看默认字符集
1mysql> SHOW VARIABLES LIKE 'character_set_%';
2+--------------------------+----------------------------+
3| Variable_name | Value |
4+--------------------------+----------------------------+
5| character_set_client | latin1 |
6| character_set_connection | latin1 |
7| character_set_database | latin1 |
8| character_set_results | latin1 |
9| character_set_server | latin1 |
10| character_set_system | utf8 |
11| character_sets_dir | /usr/share/mysql/charsets/ |
12+--------------------------+----------------------------+
137 rows in set (0.00 sec)
2、查看排序方式
1mysql> SHOW VARIABLES LIKE 'collation_%';
2+----------------------+-------------------+
3| Variable_name | Value |
4+----------------------+-------------------+
5| collation_connection | latin1_swedish_ci |
6| collation_database | latin1_swedish_ci |
7| collation_server | latin1_swedish_ci |
8+----------------------+-------------------+
93 rows in set (0.00 sec)
注:以上部分也可以通过status部分查到,这里对定位该问题作用并不大,这里只是把相关的命令都进行下列举。
二、查看数据库database编码及修改
1、查看database编码
通过以下命令查看
1mysql> show CREATE database test;
2/*查询结果为*/
3create database name character set utf8; 或
4CREATE DATABASE `test` /*!40100 DEFAULT CHARACTER SET utf8 */
2、修改database编码
如果编码是默认的latin1想改为uft8 ,则可以执行下面的语句:
1mysql> alter database name character set utf8;
三、查看表tables编码及修改
1、查看table编码
1mysql> show create table student;
2DROP TABLE IF EXISTS `student`;
3CREATE TABLE `student` (
4 `id` int(11) NOT NULL,
5 `name` varchar(10) DEFAULT NULL,
6 `age` int(11) NOT NULL,
7 `addr` varchar(20) CHARACTER SET latin1 DEFAULT NULL,
8 PRIMARY KEY (`id`)
9) ENGINE=InnoDB DEFAULT CHARSET=latin1;
2、修改表字段编码
1mysql> alter table student character set utf8;
四、修改列col编码及修改
如第三部分tables中的语句,其中addr
varchar(20) CHARACTER SET latin1 DEFAULT NULL 中的addr的编码就是latin1,现将其改为utf8 :
1mysql> alter table student modify addr varchar(50) CHARACTER SET utf8;
五、客户端编码与服务端不一致时乱码
还有一种情况就是当客户端使用的编码与服务端编码不一致时,查询出的结果也会是乱码,想要看到非乱码的结果可以在执行 sql语句前加上一句:
1SET NAMES 'utf8';
2其相当于下面三句
3SET character_set_client = utf8;
4SET character_set_results = utf8;
5SET 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
捐赠本站(Donate)
如您感觉文章有用,可扫码捐赠本站!(If the article useful, you can scan the QR code to donate))
- Author: shisekong
- Link: https://blog.361way.com/mysql-coding/2954.html
- License: This work is under a 知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议. Kindly fulfill the requirements of the aforementioned License when adapting or creating a derivative of this work.