乱码问题记录
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