joe

mariadb数据库输入中文乱码解决

当使用mysql数据库时,作为纯正的爱国者(实质是英语看不懂),当然会使用中文存储一些数据,但是默认情况下存储的中文是 ?????? 这种外星文文字,这是要搞什么?

因此如何修改数据库中的编码格式设置呢?

数据库编码格式的查看

  • 登陆数据库

$ mysql -uroot -p
  • 通过下面命令查看mysql的编码格式;

MariaDB [(none)]> show variables like 'character_set_%';
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8                       |
| character_set_connection | utf8                       |
| character_set_database   | latin1                     |
| character_set_filesystem | binary                     |
| character_set_results    | utf8                       |
| character_set_server     | latin1                     |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+

临时修改数据库的编码格式

  • 修改除了character_set_filesystem之外的其他变量的编码格式为utf;

MariaDB [(none)]> set character_set_server='utf8';
Query OK, 0 rows affected (0.00 sec)

MariaDB [(none)]> set character_set_database = 'utf8';
Query OK, 0 rows affected (0.00 sec)
  • 但是,很坑的是,当重启服务后,刚才的设置就直接失效,也是挺崩溃的;大招在下面.

永久修改数据库的编码格式

  • 配置mysql的配置文件,配置文件在/etc/my.cnf.d/目录,设置编码格式:

  • 第一个文件修改: /etc/my.cnf.d/client.cnf

   [client]
       default-character-set=utf8
  • 第二个文件修改: /etc/my.cnf.d/server.cnf

  # this is only for the mysqld standalone daemon
  [mysqld]
      character-set-server=utf8
  • 上面设置完成,看似很完美,但是重启mariadb服务后,character_set_database并没有进行修改,因此,为了一步到位,直接设置character_set_database编码格式为utf8,如下:

MariaDB [(none)]> set character_set_database = 'utf8';
Query OK, 0 rows affected (0.00 sec)

重启 MariaDB

      systemctl start mariadb.service #启动MariaDB
      systemctl stop mariadb.service #停止MariaDB
      systemctl restart mariadb.service #重启MariaDB
      systemctl enable mariadb.service #设置开机启动


码字很辛苦,转载请注明来自朱一兵的博客《mariadb数据库输入中文乱码解决》

评论