天天看点

Linux——Mysql中文不兼容问题Linux 下使用Mysql 命令行时 中文不兼容问题记录

Linux 下使用Mysql 命令行时 中文不兼容问题记录

Mysql使用新手,在linux中使用mysql时遇到中文相关的两个问题

  1. 在命令行中无法输入中文
  2. insert 中文显示乱码以及无法插入的

系统环境

操作系统: ubuntu 18.04 LTS

Mysql 版本: 5.7.32

远程工具: Xshell 7

说明

  1. 验证完成在Terminal中可以输入中文
  2. 使用

    mysql -u$(USERNAME) -p$(PASSWD)

    后无法在mysql的命令行操作界面中无法输入中文
  3. 当mysql 命令行操作界面中可以使用后,却无法将中文字符插入到数据库中

解决方案

  1. 统一系统编码和mysql的编码,最好统一到

    UTF8

    ,使用

    locale

    查看系统语言和编码类型:
    Linux——Mysql中文不兼容问题Linux 下使用Mysql 命令行时 中文不兼容问题记录
    查看mysql 当前的编码格式,使用命令

    show variables like 'character%'

    :
    Linux——Mysql中文不兼容问题Linux 下使用Mysql 命令行时 中文不兼容问题记录
    需要着重注意的是

    character_set_database

    的值,确保和系统一致,如果不一样,可以使用命令:

    alter database <数据库名> charset utf8

  2. 修改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

总结

整体来说,上述所有的问题归根到底都是编码格式的问题,需要确保操作系统、数据库、数据库表、数据库表的列这几个的编码格式保持一致,才能解决中文输入和乱码的问题。

继续阅读