MySQL 内部设置的编码与表中定义的编码问题

有时候,我们向表中插入中文数据的字符串,可是却不能向表中插入该中文数据的字符串,其实是编码解码问题。MySQL 内部设置的编码与定义表的时候的编码不同,导致编码异常,要么就是不能够将数据插入到数据表中,要么就是数据已经插入到了编码表中了,可是却会出现乱码的情况。下面,是我个人的解决方案,能够实现插入中文数据:

查看 MySQL 内部设置的编码

首先就是要查看 MySQL 内部设置的编码。查看包含character开头的全局变量

SHOW VARIABLES LIKE 'character%';

执行结果:
img

解决方案

修改MySQL内部设置的编码

修改 client、connection、results、database、server的编码为 GBK 或 UTF8

  1. 修改客户端的编码为 UTF8

    SET character_set_client = utf8;
    
  2. 修改连接的编码为 UTF8

    SET character_set_connection = utf8;
    
  3. 修改查询的结果编码为 UTF8

    SET character_set_results = utf8;
    
  4. 修改数据库编码为 UTF8

    SET character_set_database = utf8;
    
  5. 修改数据库服务器的编码为 UTF8

    SET character_set_server = utf8;
    

再次查看MySQL内部编码,查看是否修改成功

SHOW VARIABLES LIKE 'character%';

修改表中设置的编码

查看创建表的SQL语句

SHOW CREATE TABLE 表名;

如students表:

SHOW CREATE TABLE students;

该表是我为了测试已经创建好的,结果如下:

CREATE TABLE `students` (
  `Id` int(30) NOT NULL,
  `Name` varchar(10) DEFAULT NULL,
  `Age` int(4) DEFAULT NULL,
  `Gender` varchar(25) DEFAULT NULL,
  PRIMARY KEY (`Id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1

可以看到CHARSET=latin1,即students表的编码格式为latin1。

修改表中的编码格式

ALTER TABLE 表名 CONVERT TO CHARACTER SET 新编码格式 COLLATE 排序规则;

如上面查看的students表:

ALTER TABLE students CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;

将students表的编码格式修改为utf8,MySQL中的排序规则为utf8_general_ci

修改成功后,再次查看student表的SQL:

CREATE TABLE `students` (
  `Id` int(30) NOT NULL,
  `Name` varchar(10) DEFAULT NULL,
  `Age` int(4) DEFAULT NULL,
  `Gender` varchar(25) DEFAULT NULL,
  PRIMARY KEY (`Id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8

发现已经修改成功了。这个时候就可以向students表中添加中文数据了。

posted @ 2020-02-14 22:41  LeeHua  阅读(399)  评论(0编辑  收藏  举报