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


Posted in MySQL onMay 06, 2021

一、遇到的问题

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

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

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

二、分析问题

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

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

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

三、真正的问题

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

真正的问题打开表的信息可以看到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文件

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

此时再查看表信息

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

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

五、解决效果

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

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

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

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

MySQL 相关文章推荐
MySQL之高可用集群部署及故障切换实现
Apr 22 MySQL
jdbc使用PreparedStatement批量插入数据的方法
Apr 27 MySQL
MySQL 逻辑备份与恢复测试的相关总结
May 14 MySQL
分析MySQL抛出异常的几种常见解决方式
May 18 MySQL
浅谈mysql返回Boolean类型的几种情况
Jun 04 MySQL
解决mysql:ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO/YES)
Jun 26 MySQL
MySQL 那些常见的错误设计规范,你都知道吗
Jul 16 MySQL
MySQL图形化管理工具Navicat安装步骤
Dec 04 MySQL
Mysql存储过程、触发器、事件调度器使用入门指南
Jan 22 MySQL
MySQL数据库表约束讲解
Jun 21 MySQL
浅谈MySql update会锁定哪些范围的数据
Jun 25 MySQL
MySQL 原理与优化之Limit 查询优化
Aug 14 MySQL
MySQL时间设置注意事项的深入总结
仅用一句SQL更新整张表的涨跌幅、涨跌率的解决方案
May 06 #MySQL
MySQL创建高性能索引的全步骤
将图片保存到mysql数据库并展示在前端页面的实现代码
MySQL的join buffer原理
Apr 29 #MySQL
Mysql服务添加 iptables防火墙策略的方案
Apr 29 #MySQL
MySQL数据迁移相关总结
You might like
怎样在UNIX系统下安装MySQL
2006/10/09 PHP
一个比较简单的PHP 分页分组类
2009/12/10 PHP
php防止站外远程提交表单的方法
2014/10/20 PHP
PHP日期函数date格式化UNIX时间的方法
2015/03/19 PHP
PHP实现的多维数组排序算法分析
2018/02/10 PHP
javascript 模拟JQuery的Ready方法实现并出现的问题
2009/12/06 Javascript
Java 正则表达式学习总结和一些小例子
2012/09/13 Javascript
关于JS中setTimeout()无法调用带参函数问题的解决方法
2016/06/21 Javascript
js实现导航栏中英文切换效果
2017/01/16 Javascript
基于bootstrap实现bootstrap中文网巨幕效果
2017/05/02 Javascript
解决vue里碰到 $refs 的问题的方法
2017/07/13 Javascript
react-native DatePicker日期选择组件的实现代码
2017/09/12 Javascript
vue中的计算属性的使用和vue实例的方法示例
2017/12/04 Javascript
vue实现选项卡及选项卡切换效果
2018/04/24 Javascript
详解基于Vue cli生成的Vue项目的webpack4升级
2018/06/19 Javascript
Vue 2.0 侦听器 watch属性代码详解
2019/06/19 Javascript
使用react context 实现vue插槽slot功能
2019/07/18 Javascript
vue excel上传预览和table内容下载到excel文件中
2019/12/10 Javascript
微信小程序 获取手机号 JavaScript解密示例代码详解
2020/05/14 Javascript
jQuery实现动态操作table行
2020/11/23 jQuery
Python Django中间件,中间件函数,全局异常处理操作示例
2019/11/08 Python
django中的数据库迁移的实现
2020/03/16 Python
用Python制作mini翻译器的实现示例
2020/08/17 Python
澳大利亚男士西服品牌:M.J.Bale
2018/02/06 全球购物
Club Monaco加拿大官网:设计师男女服装
2019/09/29 全球购物
个人工作表现评价材料
2014/09/21 职场文书
抄袭同学作业检讨书1000字
2014/11/20 职场文书
通报表扬范文
2015/01/17 职场文书
采购员岗位职责
2015/02/03 职场文书
考试没考好检讨书
2015/05/06 职场文书
同学聚会致辞集锦
2015/07/28 职场文书
物资采购管理制度
2015/08/06 职场文书
外出培训学习心得体会
2016/01/18 职场文书
Windows 11上手初体验:任务栏和开始菜单等迎来大改
2021/11/21 数码科技
mysql的Buffer Pool存储及原理
2022/04/02 MySQL
CentOS7安装MySQL8的超级详细教程(无坑!)
2022/06/10 Servers