教你解決往mysql數(shù)據(jù)庫(kù)中存入漢字報(bào)錯(cuò)的方法
一、遇到的問題
在向數(shù)據(jù)庫(kù)中存入漢字時(shí)遇到這樣的問題:
Cause: java.sql.SQLException: Incorrect string value: ‘\xE6\x9F\xAF\xE5\x8D\x97' for column ‘user_name' at row 1

二、分析問題
這是由于數(shù)據(jù)庫(kù)設(shè)計(jì)有問題導(dǎo)致的,當(dāng)初創(chuàng)建數(shù)據(jù)庫(kù)的時(shí)候直接選擇的默認(rèn),沒有修改為utf-8,后來嘗試手動(dòng)修改還是不行。
嘗試把數(shù)據(jù)庫(kù)和表的默認(rèn)字段改為utf8,但是還是不能存漢字。


三、真正的問題

真正的問題打開表的信息可以看到
latin1的存在,這是因?yàn)榧词刮覀兒竺媸謩?dòng)修改字段類型還是修改不了的,就像上面即使我們修改了,可是表信息還是沒有改掉,真正的解決辦法:1、要不我們重新創(chuàng)建數(shù)據(jù)庫(kù),把創(chuàng)建的時(shí)候就設(shè)置成utf8(有點(diǎn)費(fèi)勁),2、要不就是下面的解決辦法(也不是那么輕松,如果涉及的字段比較多的話),導(dǎo)出并修改sql語句,然后在重新執(zhí)行sql語句。
四、解決辦法
把我們的數(shù)據(jù)庫(kù)導(dǎo)出為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 '賬號(hào)', `password` varchar(50) CHARACTER SET latin1 NOT NULL COMMENT '密碼', `user_state` varchar(10) CHARACTER SET latin1 NOT NULL DEFAULT '1' COMMENT '狀態(tài),邏輯刪除', 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 */;
就像上面說的一樣我們發(fā)現(xiàn)了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 '賬號(hào)', `password` varchar(50) CHARACTER SET utf8 NOT NULL COMMENT '密碼', `user_state` varchar(10) CHARACTER SET utf8 NOT NULL DEFAULT '1' COMMENT '狀態(tài),邏輯刪除', 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 */;
選擇執(zhí)行sql腳本,選擇修改后的sql文件

此時(shí)再查看表信息

這樣就全部是utf8了,這樣基本上可以肯定解決問題了。
五、解決效果
測(cè)試驗(yàn)證下是否真正的解決問題了:


到此這篇關(guān)于Mysql基礎(chǔ)之教你解決往數(shù)據(jù)庫(kù)中存入漢字報(bào)錯(cuò)的方法的文章就介紹到這了,更多相關(guān)往數(shù)據(jù)庫(kù)存入漢字報(bào)錯(cuò)的解決方法內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- 解決docker重啟redis,mysql數(shù)據(jù)丟失的問題
- MySQL使用Replace操作時(shí)造成數(shù)據(jù)丟失的問題解決
- 防止服務(wù)器宕機(jī)時(shí)MySQL數(shù)據(jù)丟失的幾種方案
- MySQL Delete 刪數(shù)據(jù)后磁盤空間未釋放的原因
- Python基礎(chǔ)之操作MySQL數(shù)據(jù)庫(kù)
- django將圖片保存到mysql數(shù)據(jù)庫(kù)并展示在前端頁(yè)面的實(shí)現(xiàn)
- MyBatis批量插入/修改/刪除MySql數(shù)據(jù)
- 將圖片保存到mysql數(shù)據(jù)庫(kù)并展示在前端頁(yè)面的實(shí)現(xiàn)代碼
- MySQL數(shù)據(jù)遷移相關(guān)總結(jié)
- golang實(shí)現(xiàn)mysql數(shù)據(jù)庫(kù)事務(wù)的提交與回滾
- MySQL安裝后默認(rèn)自帶數(shù)據(jù)庫(kù)的作用詳解
- MySQL 丟失數(shù)據(jù)的原因及解決
相關(guān)文章
win11系統(tǒng)下mysql8.4更改數(shù)據(jù)目錄問題解決
更改數(shù)據(jù)庫(kù)目錄是指修改MySQL數(shù)據(jù)庫(kù)的存儲(chǔ)路徑,本文主要介紹了win11系統(tǒng)下mysql8.4更改數(shù)據(jù)目錄問題解決,具有一定的參考價(jià)值,感興趣的可以了解一下2024-07-07
mysql 5.7.17 以及workbench安裝配置圖文教程
這篇文章主要為大家詳細(xì)介紹了mysql 5.7.17 以及workbench安裝配置圖文教程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-06-06
MySQL中Nested-Loop Join算法小結(jié)
數(shù)據(jù)庫(kù)中JOIN操作的實(shí)現(xiàn)主要有三種:嵌套循環(huán)連接(Nested Loop Join),歸并連接(Merge Join)和散列連接或者哈稀連接(Hash Join)。其中嵌套循環(huán)連接又視情況又有兩種變形:塊嵌套循環(huán)連接和索引嵌套循環(huán)連接。2015-12-12
Workbench連接不上阿里云服務(wù)器Ubuntu的Mysql解決方法(已測(cè))
這兩天為了解決workbench連接不上阿里云服務(wù)器的問題,搞得頭大,網(wǎng)上搜到的教程都大同小異,但唯獨(dú)到我這就是行不通。不過好在最后終于解決了,記錄一下這個(gè)坑爹的過程,另外腳本之家小編特把這些問題整理了一下,看完這一篇文章基本上就解決了2020-02-02
mysql中取系統(tǒng)當(dāng)前時(shí)間,當(dāng)前日期方便查詢判定的代碼
今天在寫一段查詢語句的時(shí)候,需要判定結(jié)束日期是不是大于當(dāng)前日期,一般情況下都是通過php判定日期,然后查詢。2011-12-12

