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

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

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

然后再重新導(dǎo)入,查看結(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查詢對應(yīng)字段時用LOWER()函數(shù)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
導(dǎo)致MySQL索引失效的一些常見寫法總結(jié)
這篇文章主要給大家介紹了關(guān)于導(dǎo)致MySQL索引失效的一些常見寫法,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-09-09
mysql數(shù)據(jù)庫備份命令分享(mysql壓縮數(shù)據(jù)庫備份)
這篇文章主要介紹了mysql數(shù)據(jù)庫備份常用語句,包括數(shù)據(jù)庫壓縮備份、備份多個MySQL數(shù)據(jù)庫、備份多個MySQL數(shù)據(jù)庫、將數(shù)據(jù)庫轉(zhuǎn)移到新服務(wù)器等語句2014-01-01
linux mysql5.5升級至mysql5.7的步驟與踩到的坑
這篇文章主要介紹了linux mysql5.5升級至mysql5.7的詳細步驟,后面腳本之家小編為大家整理了多個補充,大家可以參考一下2021-01-01
MySQL服務(wù)無法啟動:failed to restart mysql.service:&
在系統(tǒng)更新或配置變更后,MySQL服務(wù)可能無法啟動,本文提供解決MySQL服務(wù)啟動失敗的方法,包括檢查和更新服務(wù)單元文件,主要步驟包括檢查服務(wù)文件存在與否、備份舊的服務(wù)文件、使用最新的服務(wù)文件重啟MySQL服務(wù)等,確保服務(wù)能正常運行,感興趣的可以了解一下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

