乱码问题记录

1. 登录 linux 服务器,less 查看日志时,显示的中文内容乱码,vi 编辑时,显示的内容又不乱码

export LESSCHARSET=utf-8

试试指定 less 的编码,再使用 less 查看一下

 

2. shell 连接 mysql ,查询表的记录时,中文出现乱码,显示的是 “???”,在 shell 中 insert 记录时,再查出来也是乱码

# 1. 查看字符集:客户端字符集、服务端字符集、显示查询结果的字符集、database的字符集、connection的字符集
show variables like 'char%';
结果客户端、连接的字符集是 lantin1,database 和服务器的字符集是 utf8,两边不一样,导致出现了中文乱码

# 2. 连接时指定默认的字符集为 utf8,再 select 数据,就显示正常了
mysql -h xx.xx.xx.xx -P 3306 --default-character-set=utf8 -u {username} -p {password}

连接 mysql 时,没有指定字符集,结果查询使用的字符集都是 lantin1,显示中文时出现乱码。
连接时,指定字符集为 utf8 之后,再查数据时,中文就显示正常了,在 shell 中 insert 含有中文的记录时,也可以正常显示了。

客户端字符集、服务端字符集、显示查询结果的字符集、database的字符集、connection的字符集,这些个字符集应该相同才行。

如果还是不行的话,就在连接上 mysql 之后,在 mysql 客户端手动指定字符集:
(真碰到到了使用 --default-character-set=utf8 不行。之前可以,突然又不行了,查看字符集,全是 latin1)

set names utf8;

它等同于下面三个设置:
set character_set_client=utf8;
set character_set_connection=utf8;
set character_set_results=utf8;
(通过这种方式都是临时生效,下次再连接时,还需要再设置一遍。适用于不方便理性服务器配置的情况)
@see : https://segmentfault.com/a/1190000022488476

 

posted on 2021-05-20 07:54  快鸟  阅读(146)  评论(0编辑  收藏  举报