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


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

    查看 MySQL 内部设置的编码

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

    SHOW VARIABLES LIKE 'character%';

    执行结果:

    解决方案

    修改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表中添加中文数据了。

  • 相关阅读:
    关于求LCA三种方法
    逆序对与本质不同的逆序对
    缩点+割点(tarjan)
    关于线段树
    引爆点
    0 基础认知产品经理
    一款 App 开发到上架
    坚持+时间管理
    测试流程
    Java学习笔记--字符串String、StringBuffer和StringBuilder
  • 原文地址:https://www.cnblogs.com/liyihua/p/12309804.html
Copyright © 2020-2023  润新知