教你解决往mysql数据库中存入汉字报错的方法

 更新时间:2021年05月06日 11:53:43   作者:牛哄哄的柯南  
这篇文章主要介绍了Mysql基础之教你解决往数据库中存入汉字报错的方法,文中有非常详细的代码示例,对正在学习mysql的小伙伴们有非常好的帮助,需要的朋友可以参考下

一、遇到的问题

在向数据库中存入汉字时遇到这样的问题:

Cause: java.sql.SQLException: Incorrect string value: ‘\xE6\x9F\xAF\xE5\x8D\x97' for column ‘user_name' at row 1

在这里插入图片描述

二、分析问题

这是由于数据库设计有问题导致的,当初创建数据库的时候直接选择的默认,没有修改为utf-8,后来尝试手动修改还是不行

尝试把数据库和表的默认字段改为utf8,但是还是不能存汉字。

在这里插入图片描述
在这里插入图片描述

三、真正的问题

在这里插入图片描述

真正的问题打开表的信息可以看到latin1的存在,这是因为即使我们后面手动修改字段类型还是修改不了的,就像上面即使我们修改了,可是表信息还是没有改掉,真正的解决办法:1、要不我们重新创建数据库,把创建的时候就设置成utf8(有点费劲),2、要不就是下面的解决办法(也不是那么轻松,如果涉及的字段比较多的话),导出并修改sql语句,然后在重新执行sql语句。

四、解决办法

把我们的数据库导出为sql文件:

/*
SQLyog Enterprise v12.08 (64 bit)
MySQL - 5.7.31 : Database - data_test
*********************************************************************
*/


/*!40101 SET NAMES utf8 */;

/*!40101 SET SQL_MODE=''*/;

/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
CREATE DATABASE /*!32312 IF NOT EXISTS*/`data_test` /*!40100 DEFAULT CHARACTER SET latin1*/;

USE `data_test`;

/*Table structure for table `user` */

DROP TABLE IF EXISTS `user`;

CREATE TABLE `user` (
  `user_id` int(11) NOT NULL AUTO_INCREMENT,
  `user_name` varchar(50) CHARACTER SET latin1 NOT NULL COMMENT '账号',
  `password` varchar(50) CHARACTER SET latin1 NOT NULL COMMENT '密码',
  `user_state` varchar(10) CHARACTER SET latin1 NOT NULL DEFAULT '1' COMMENT '状态,逻辑删除',
  PRIMARY KEY (`user_id`)
) ENGINE=InnoDB AUTO_INCREMENT=13 DEFAULT CHARSET=latin1;

/*Data for the table `user` */

LOCK TABLES `user` WRITE;

insert  into `user`(`user_id`,`user_name`,`password`,`user_state`) values (1,'keafmd','keafmd','1'),(3,'21312321','123','0'),(11,'213','213','1'),(12,'keafmd','666','0');

UNLOCK TABLES;

/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;

就像上面说的一样我们发现了latin1的身影,那么我们就把latin1全部替换为utf8

替换后的sql文件:

/*
SQLyog Enterprise v12.08 (64 bit)
MySQL - 5.7.31 : Database - data_test
*********************************************************************
*/


/*!40101 SET NAMES utf8 */;

/*!40101 SET SQL_MODE=''*/;

/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
CREATE DATABASE /*!32312 IF NOT EXISTS*/`data_test` /*!40100 DEFAULT CHARACTER SET utf8  */;

USE `data_test`;

/*Table structure for table `user` */

DROP TABLE IF EXISTS `user`;

CREATE TABLE `user` (
  `user_id` int(11) NOT NULL AUTO_INCREMENT,
  `user_name` varchar(50) CHARACTER SET utf8  NOT NULL COMMENT '账号',
  `password` varchar(50) CHARACTER SET utf8  NOT NULL COMMENT '密码',
  `user_state` varchar(10) CHARACTER SET utf8  NOT NULL DEFAULT '1' COMMENT '状态,逻辑删除',
  PRIMARY KEY (`user_id`)
) ENGINE=InnoDB AUTO_INCREMENT=13 DEFAULT CHARSET=utf8;

/*Data for the table `user` */

LOCK TABLES `user` WRITE;

insert  into `user`(`user_id`,`user_name`,`password`,`user_state`) values (1,'keafmd','keafmd','1'),(3,'21312321','123','0'),(11,'213','213','1'),(12,'keafmd','666','0');

UNLOCK TABLES;

/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;

选择执行sql脚本,选择修改后的sql文件

在这里插入图片描述

此时再查看表信息

在这里插入图片描述

这样就全部是utf8了,这样基本上可以肯定解决问题了。

五、解决效果

测试验证下是否真正的解决问题了:

在这里插入图片描述

在这里插入图片描述

到此这篇关于Mysql基础之教你解决往数据库中存入汉字报错的方法的文章就介绍到这了,更多相关往数据库存入汉字报错的解决方法内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • win11系统下mysql8.4更改数据目录问题解决

    win11系统下mysql8.4更改数据目录问题解决

    更改数据库目录是指修改MySQL数据库的存储路径,本文主要介绍了win11系统下mysql8.4更改数据目录问题解决,具有一定的参考价值,感兴趣的可以了解一下
    2024-07-07
  • 关于MySQL B+树索引与哈希索引详解

    关于MySQL B+树索引与哈希索引详解

    索引是一种特殊的数据库结构,被设计用来快速查询数据库表中的特定记录,下面这篇文章主要给大家介绍了关于MySQL B+树索引与哈希索引的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下
    2022-03-03
  • 详解MySQL开启远程连接权限

    详解MySQL开启远程连接权限

    这篇文章主要介绍了MySQL开启远程连接权限,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-04-04
  • mysql 5.7.17 以及workbench安装配置图文教程

    mysql 5.7.17 以及workbench安装配置图文教程

    这篇文章主要为大家详细介绍了mysql 5.7.17 以及workbench安装配置图文教程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-06-06
  • Win10下mysql 8.0.15 安装配置方法图文教程

    Win10下mysql 8.0.15 安装配置方法图文教程

    这篇文章主要为大家详细介绍了Win10下mysql 8.0.15 安装配置方法图文教程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-02-02
  • MySQL中Nested-Loop Join算法小结

    MySQL中Nested-Loop Join算法小结

    数据库中JOIN操作的实现主要有三种:嵌套循环连接(Nested Loop Join),归并连接(Merge Join)和散列连接或者哈稀连接(Hash Join)。其中嵌套循环连接又视情况又有两种变形:块嵌套循环连接和索引嵌套循环连接。
    2015-12-12
  • 深入解析MySQL的窗口函数

    深入解析MySQL的窗口函数

    这篇文章主要介绍了深入解析MySQL的窗口函数,窗口可以理解为记录集合,窗口函数就是在满足某种条件的记录集合上执行的特殊函数,即:应用在窗口内的函数,需要的朋友可以参考下
    2023-07-07
  • Workbench连接不上阿里云服务器Ubuntu的Mysql解决方法(已测)

    Workbench连接不上阿里云服务器Ubuntu的Mysql解决方法(已测)

    这两天为了解决workbench连接不上阿里云服务器的问题,搞得头大,网上搜到的教程都大同小异,但唯独到我这就是行不通。不过好在最后终于解决了,记录一下这个坑爹的过程,另外脚本之家小编特把这些问题整理了一下,看完这一篇文章基本上就解决了
    2020-02-02
  • MYSQL修改所有表的存储引擎格式语句

    MYSQL修改所有表的存储引擎格式语句

    MYSQL如何修改所有表的存储引擎格式,或许下面的sql语句对大家有所帮助
    2013-08-08
  • mysql中取系统当前时间,当前日期方便查询判定的代码

    mysql中取系统当前时间,当前日期方便查询判定的代码

    今天在写一段查询语句的时候,需要判定结束日期是不是大于当前日期,一般情况下都是通过php判定日期,然后查询。
    2011-12-12

最新评论