mysql通過INSERT IGNORE INTO插入拼音字符無效問題及解決
前言
在做一個批量導入關(guān)鍵詞的功能時,發(fā)現(xiàn)關(guān)鍵詞如果帶有像é這樣的拼音字符時,存入數(shù)據(jù)庫時會識別為e,造成部分關(guān)鍵詞沒有被導入,且與原來部分關(guān)鍵詞可能重復的情況,因此記錄下來避免以后再踩坑。
提示:以下是本篇文章正文內(nèi)容,下面案例可供參考
一、準備工作
準備一份批量導入關(guān)鍵詞excel,其中包含2個關(guān)鍵詞
1.pokemon
2.pokémon
注意:這2個關(guān)鍵詞中一個是普通的e,一個是帶音節(jié)的é
準備數(shù)據(jù)庫表sql腳本
-- 導入關(guān)鍵詞表
CREATE TABLE `keyword_lexicon` (
`id` int(10) NOT NULL AUTO_INCREMENT,
`keyword` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '搜索關(guān)鍵詞',
PRIMARY KEY ("id"),
UNIQUE KEY "idx_keyword" ("keyword") USING BTREE COMMENT '關(guān)鍵詞'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='導入關(guān)鍵詞表';
二、場景復現(xiàn)
簡單寫一個導入接口,代碼就不附上了,需要注意的是導入sql用的是INSERT IGNORE INTO的方式,如果表中已經(jīng)有該關(guān)鍵詞了則不會寫入表中。(keyword字段設為唯一索引)
導入sql例子如下
INSERT IGNORE INTO keyword_lexicon (`keyword`) VALUES ('pokemon'),('pokémon')
調(diào)接口完成導入后,查看數(shù)據(jù)庫表,發(fā)現(xiàn)只有一條pokemon的數(shù)據(jù)。

三、解決問題
查看表結(jié)構(gòu)發(fā)現(xiàn),keyword字段的排序規(guī)則為
utf8mb4_general_ci

這種排序規(guī)則在識別é這種帶有音節(jié)的字符時,會識別為e,導致2個關(guān)鍵詞在通過INSERT IGNORE INTO導入后只會有一條記錄,只要將排序規(guī)則改為
utf8mb4_bin

然后再重新導入,查看結(jié)果可發(fā)現(xiàn)2條數(shù)據(jù)都已經(jīng)插入表中,問題解決。

總結(jié)
- utf8mb4_bin是區(qū)分大小寫的,也區(qū)分e和é這類字符的
- utf8_genera_ci是不區(qū)分大小寫的,也不區(qū)分e和é這類字符
注:utf8_general_cs是區(qū)分大小寫的,但不區(qū)分e和é這類字符
如果需要區(qū)分帶有音節(jié)的字符,又不想要區(qū)分大小寫,可在sql查詢對應字段時用LOWER()函數(shù)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
mysql數(shù)據(jù)庫備份命令分享(mysql壓縮數(shù)據(jù)庫備份)
這篇文章主要介紹了mysql數(shù)據(jù)庫備份常用語句,包括數(shù)據(jù)庫壓縮備份、備份多個MySQL數(shù)據(jù)庫、備份多個MySQL數(shù)據(jù)庫、將數(shù)據(jù)庫轉(zhuǎn)移到新服務器等語句2014-01-01
linux mysql5.5升級至mysql5.7的步驟與踩到的坑
這篇文章主要介紹了linux mysql5.5升級至mysql5.7的詳細步驟,后面腳本之家小編為大家整理了多個補充,大家可以參考一下2021-01-01
MySQL服務無法啟動:failed to restart mysql.service:&
在系統(tǒng)更新或配置變更后,MySQL服務可能無法啟動,本文提供解決MySQL服務啟動失敗的方法,包括檢查和更新服務單元文件,主要步驟包括檢查服務文件存在與否、備份舊的服務文件、使用最新的服務文件重啟MySQL服務等,確保服務能正常運行,感興趣的可以了解一下2024-10-10
高效數(shù)據(jù)流轉(zhuǎn):Mycat分庫分表與GreatSQL實時同步
聚焦數(shù)據(jù)庫擴容與實時數(shù)據(jù)同步,探索MyCat分庫分表與GreatSQL的強大結(jié)合!想在大規(guī)模數(shù)據(jù)處理中游刃有余?本指南將帶你輕松掌握MyCat的分布式解決方案和GreatSQL的實時同步機制,讓高效、穩(wěn)定的數(shù)據(jù)庫管理觸手可及,一起揭開高并發(fā)環(huán)境下數(shù)據(jù)庫優(yōu)化的神秘面紗吧!2024-01-01

