教你解决往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 05 MySQL
IDEA 链接Mysql数据库并执行查询操作的完整代码
May 20 MySQL
Mysql Online DDL的使用详解
May 20 MySQL
MySQL数据库压缩版本安装与配置详细教程
May 21 MySQL
MySQL删除和插入数据很慢的问题解决
Jun 03 MySQL
MySQL中in和exists区别详解
Jun 03 MySQL
MySQL约束超详解
Sep 04 MySQL
mysql自增长id用完了该怎么办
Feb 12 MySQL
MySQL为数据表建立索引的原则详解
Mar 03 MySQL
MySQL数据库事务的四大特性
Apr 20 MySQL
MySQL 执行数据库更新update操作的时候数据库卡死了
May 02 MySQL
Mysql如何查看是否使用到索引
Dec 24 MySQL
MySQL时间设置注意事项的深入总结
仅用一句SQL更新整张表的涨跌幅、涨跌率的解决方案
May 06 #MySQL
MySQL创建高性能索引的全步骤
将图片保存到mysql数据库并展示在前端页面的实现代码
MySQL的join buffer原理
Apr 29 #MySQL
Mysql服务添加 iptables防火墙策略的方案
Apr 29 #MySQL
MySQL数据迁移相关总结
You might like
如何使用php实现评委评分器
2015/07/31 PHP
eclipse php wamp配置教程
2016/06/30 PHP
Yii2 中实现单点登录的方法
2018/03/09 PHP
PHP闭包定义与使用简单示例
2018/04/13 PHP
PHP使用函数用法详解
2018/09/30 PHP
PHP中常用的三种设计模式详解【单例模式、工厂模式、观察者模式】
2019/06/14 PHP
jquery遍历数组与筛选数组的方法
2013/11/05 Javascript
jQuery提示插件alertify使用指南
2015/04/21 Javascript
jQuery实现鼠标悬停显示提示信息窗口的方法
2015/04/30 Javascript
基于AngularJS+HTML+Groovy实现登录功能
2016/02/17 Javascript
js实现不重复导入的方法
2016/03/02 Javascript
BootStrap中按钮点击后被禁用按钮的最佳实现方法
2016/09/23 Javascript
javascript中setAttribute兼容性用法分析
2016/12/12 Javascript
详解jQuery事件
2017/01/13 Javascript
jQuery中绑定事件bind() on() live() one()的异同
2017/02/23 Javascript
canvas实现刮刮卡效果
2017/03/14 Javascript
微信小程序实现城市列表选择
2018/06/05 Javascript
微信小程序-API接口安全详解
2019/07/16 Javascript
js动态获取时间的方法分析
2019/08/02 Javascript
Node.JS用纯JavaScript生成图片或滑块式验证码功能
2019/09/12 Javascript
详解Vue的watch中的immediate与watch是什么意思
2019/12/30 Javascript
webpack5 联邦模块介绍详解
2020/07/08 Javascript
selenium 反爬虫之跳过淘宝滑块验证功能的实现代码
2020/08/27 Javascript
更改Python命令行交互提示符的方法
2015/01/14 Python
Python+matplotlib实现填充螺旋实例
2018/01/15 Python
Python中对数组集进行按行打乱shuffle的方法
2018/11/08 Python
Python 实现数据结构中的的栈队列
2019/05/16 Python
PyTorch中permute的用法详解
2019/12/30 Python
PyCharm取消波浪线、下划线和中划线的实现
2020/03/03 Python
Python Opencv 通过轨迹(跟踪)栏实现更改整张图像的背景颜色
2020/03/09 Python
使用已经得到的keras模型识别自己手写的数字方式
2020/06/29 Python
美国领先的眼镜和太阳镜在线零售商:Glasses.com
2019/08/26 全球购物
设计总监岗位职责
2013/12/07 职场文书
男方父母婚礼答谢词
2014/01/25 职场文书
市场专员岗位职责
2014/02/14 职场文书
公司董事任命书
2015/09/21 职场文书