亲测 mysql修改字符集、中文乱码 拿走吧!

  • Post author:
  • Post category:mysql




版本

centos 8

mysql 5.7



修改字符集

记录下修改配置文件的方法

(谁知道我到底看了多少重复的文章)

步骤:

打开配置文件,分别在[mysql]、[mysqld]、[mysql]

添加默认字符集

———————————————————————

mysql> system vim /etc/my.cnf

	[client]
		default-character-set=utf8
	[mysqld]
		character_set_server=utf8
	[mysql]
		default-character-set=utf8
        (这个的作用和set names是一样的 ) 



中文无法显示再现

mysql> select * from latin_utf ;

±—–+

| name |

±—–+

| ?? |

| ?? |

| ?? |

±—–+

3 rows in set (0.00 sec)


查看字符集,数据库和客户端,连接,返回结果的字符集不一样


mysql> show variables like ‘char%’;

±————————-±—————————+

| Variable_name | Value |

±————————-±—————————+

| character_set_client | latin1 |

| character_set_connection | latin1 |

| character_set_database | utf8 |

| character_set_filesystem | binary |

| character_set_results | latin1 |

| character_set_server | latin1 |

| character_set_system | utf8 |

| character_sets_dir | /usr/share/mysql/charsets/ |

±————————-±—————————+

8 rows in set (0.00 sec)


修改如下:

mysql> set names utf8;

Query OK, 0 rows affected (0.00 sec)

mysql> select * from latin_utf ;

±——-+

| name |

±——-+

| 哈哈 |

| 张三 |

| 赵四 |

±——-+

3 rows in set (0.00 sec)

mysql> show variables like ‘char%’;

±————————-±—————————+

| Variable_name | Value |

±————————-±—————————+

| character_set_client | utf8 |

| character_set_connection | utf8 |

| character_set_database | utf8 |

| character_set_filesystem | binary |

| character_set_results | utf8 |

| character_set_server | latin1 |

| character_set_system | utf8 |

| character_sets_dir | /usr/share/mysql/charsets/ |

±————————-±—————————+

8 rows in set (0.00 sec)



修改已有数据表的字符集

假设原来的表的字符集是latin1,现在要修改成utf8

修改配置文件的办法只新创建的表或者记录生效,

不想丢弃原来的数据,需要将表先导出,调整字符集,在导入才可以:

步骤

1、导出表结构

[root@localhost mysql]# mysqldump -uroot -p –default-character-set=latin1 -d data_5>createtab.sql

2、手工修改原来的字符集latin为新的utf8字符集

[root@localhost mysql]# vim createtab.sql

CREATE TABLE

latin_utf


(

name

varchar(20)

DEFAULT NULL

) ENGINE=InnoDB DEFAULT CHARSET=utf8;

3、导出数据

[root@localhost mysql]# mysqldump -uroot -p –quick –no-create-info –extended-insert –default-character-set=latin1 data_5>data.sql

打开导出的数据表,修改set names为需要的字符集

[root@localhost mysql]# vim data.sql

在这里插入图片描述

4、使用新的字符集创建数据库

mysql> create database data_5_2 default charset utf8;

mysql> use data_5_2;

mysql> source createtab.sql;

5、导入数据

mysql> source createtab.sql;



关于字符集其它一些命令

———————————————————————

1、查看所用可用的字符集

mysql> show character set;

mysql> select * from information_schema.character_sets limit 3;

———————————————————————

2、查看字符集utf8的校对规则

mysql> SHOW COLLATION LIKE ‘utf8%’;

———————————————————————

3、校对规则命名约定:

_ci 大小写不敏感

_cs 大小写敏感

_bin 比较是基于字符编码的值

———————————————————————

4、例子:指定字符集gbk ,编码规则gbk_chinese_ci,比较字符A 与a是否相同

mysql> select case when _gbk ‘A’ COLLATE gbk_chinese_ci=_gbk ‘a’ COLLATE gbk_chinese_ci then 1 else 0 end\G

返回1

———————————————————————

方法来源:

[1] : 深入浅出mysql第九章

[2]: mysql导入导出sql文件https://www.cnblogs.com/yuwensong/p/3955834.html



版权声明:本文为weixin_49145408原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。