Linux 下使用Mysql 命令行时 中文不兼容问题记录
Mysql使用新手,在linux中使用mysql时遇到中文相关的两个问题
- 在命令行中无法输入中文
- insert 中文显示乱码以及无法插入的
系统环境
操作系统: ubuntu 18.04 LTS
Mysql 版本: 5.7.32
远程工具: Xshell 7
说明
- 验证完成在Terminal中可以输入中文
- 使用
后无法在mysql的命令行操作界面中无法输入中文mysql -u$(USERNAME) -p$(PASSWD)
- 当mysql 命令行操作界面中可以使用后,却无法将中文字符插入到数据库中
解决方案
- 统一系统编码和mysql的编码,最好统一到
,使用UTF8
查看系统语言和编码类型: 查看mysql 当前的编码格式,使用命令locale
: 需要着重注意的是show variables like 'character%'
的值,确保和系统一致,如果不一样,可以使用命令:character_set_database
alter database <数据库名> charset utf8
- 修改mysql配置,配置文件路径:
,确保该配置文件中的/etc/mysql/conf.d/mysql.cnf
配置下没有[mysql]
default-character-set=utf8
操作完上述步骤后,应该可以在mysql的命令行中输入中文字符;但有可能存在问题:无法将中文插入到数据库表中,在中文字符处报错,则需要查看第三个步骤。
-
问题的关键也在于编码方式,表的编码格式需要和数据库的编码格式保持一致
使用命令:
可以看到数据库表的编码格式以及每一列的编码格式,确保要插入中文的那一列的编码格式为show create table `TABLENAME`
,如果不一样可以使用命令:utf8
- 修改单个列的编码格式
ALTER TABLE 表名 CHANGE `列名1` `列名1` varchar(32) CHARACTER SET utf8
- 修改整个表的所有列的编码格式
ALTER TABLE 表名 CONVERT TO CHARACTER SET utf8
- 修改单个列的编码格式
总结
整体来说,上述所有的问题归根到底都是编码格式的问题,需要确保操作系统、数据库、数据库表、数据库表的列这几个的编码格式保持一致,才能解决中文输入和乱码的问题。