往資料庫中存入漢字為啥報錯的解決辦法
- 遇到的問題
- 分析問題
- 真正的問題
- 解決辦法
- 解決效果
遇到的問題
在向資料庫中存入漢字時遇到這樣的問題:
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了,這樣基本上可以肯定解決問題了,
解決效果
測驗驗證下是否真正的解決問題了:


OK,到此完美解決了學妹的問題,如果對你也有幫助那就太好了,
以上就是學妹跑過來問我往資料庫中存入漢字為啥報錯【手把手講解】的全部內容,
看完如果對你有幫助,感謝點贊支持!
如果你是電腦端,看到右下角的 “一鍵三連” 了嗎,沒錯點它[哈哈]

加油!
共同努力!
Keafmd
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/282105.html
標籤:java
