教你解決往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基礎之教你解決往數據庫中存入漢字報錯的方法的文章就介紹到這瞭,更多相關往數據庫存入漢字報錯的解決方法內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!
推薦閱讀:
- Python實現mysql數據庫中的SQL文件生成和導入
- 徹底解決MySQL使用中文亂碼的方法
- 淺談MySql整型索引和字符串索引失效或隱式轉換問題
- 深入探究Mysql模糊查詢是否區分大小寫
- 關於MySQL中的 like操作符詳情