亲测 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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值