zoukankan      html  css  js  c++  java
  • Mysql数据库插入中文出现乱码相关

    查看数据库编码的命令:show variables like "character%";
    mysql> show variables like "character%";
    +--------------------------+----------------------------+
    | 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/ |
    +--------------------------+----------------------------+
    8 rows in set (0.00 sec)
    

      有关上面八个character_set相关的变量代表的意思:

    1. character_set_client
    主要用来设置客户端使用的字符集。
    2. character_set_connection
    主要用来设置连接数据库时的字符集,如果程序中没有指明连接数据库使用的字符集类型则按照这个字符集设置。
    3. character_set_database
    主要用来设置默认创建数据库的编码格式,如果在创建数据库时没有设置编码格式,就按照这个格式设置。
    4. character_set_filesystem
    文件系统的编码格式,吧操作系统上面的文件名转化成此字符集,即把character_set_client转换character_set_filesystem,默认binary不做任何转换。
    5. character_set_results
    数据库给客户端返回时使用的编码格式,如果没有指明,使用服务器默认的编码格式。
    6. character_set_server
    服务器安装时指定的默认编码格式,这个变量建议由系统自己管理,不要认为指定。
    7. character_set_system
    数据库系统使用的编码格式,这个值一直时utf8,不需要设置,它是存储系统元数据的编码格式。
    8. character_sets_dir
    这个变量是字符集安装的目录。


    修改指定编码为utf-8,在/etc/mysql/my.cnf中添加以下内容,添加完后重启mysql服务(sudo systemctl restart mysql)。

    [client]
    default-character-set=utf8
    
    [mysql]
    default-character-set=utf8
    
    [mysqld]
    collation-server = utf8_unicode_ci
    init-connect='SET NAMES utf8'
    character-set-server = utf8

    已经创建的表里面的字符集还没有被改过来。

    mysql> show create table tbl_dept;
    +----------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
    | Table    | Create Table                                                                                                                                                                                   |
    +----------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
    | tbl_dept | CREATE TABLE `tbl_dept` (
      `dept_id` int(11) NOT NULL AUTO_INCREMENT,
      `dept_name` varchar(255) NOT NULL,
      PRIMARY KEY (`dept_id`)
    ) ENGINE=InnoDB AUTO_INCREMENT=13 DEFAULT CHARSET=latin1 |
    +----------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
    1 row in set (0.00 sec)

    mysql> alter table tbl_dept convert to character set utf8;

    Query OK, 6 rows affected (0.18 sec)
    Records: 6 Duplicates: 0 Warnings: 0

    mysql>
    mysql> show create table tbl_dept;
    +----------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
    | Table | Create Table |
    +----------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
    | tbl_dept | CREATE TABLE `tbl_dept` (
    `dept_id` int(11) NOT NULL AUTO_INCREMENT,
    `dept_name` varchar(255) NOT NULL,
    PRIMARY KEY (`dept_id`)
    ) ENGINE=InnoDB AUTO_INCREMENT=13 DEFAULT CHARSET=utf8 |
    +----------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
    1 row in set (0.00 sec)

    需要使用以下修改语句

    查看表编码
    show create table tbl_dept;
    修改表编码
    alter table tbl_dept convert to character set utf8;

    参考:https://blog.csdn.net/sun8112133/article/details/79921734

               https://dev.mysql.com/doc/refman/5.7/en/faqs-cjk.html

               http://www.pianshen.com/article/663784398/

          https://www.cnblogs.com/lynlovehyl/articles/6642792.html  

  • 相关阅读:
    【从0安装】mysql
    Java面试题整理(待完善)
    Linux部署Java项目
    执行旧命令的几种方法
    SQL Server死锁报错分析
    枚举类中枚举值不存在.valueOf(enum) 抛异常处理
    InitializingBean的项目开发使用
    巧用枚举来干掉if-else,代码更优雅!
    使用Docker安装配置GitLab CE
    批量条件导出之---CSV
  • 原文地址:https://www.cnblogs.com/kgtone/p/11064966.html
Copyright © 2011-2022 走看看