mysql通過INSERT IGNORE INTO插入拼音字符無效問題及解決
前言
在做一個(gè)批量導(dǎo)入關(guān)鍵詞的功能時(shí),發(fā)現(xiàn)關(guān)鍵詞如果帶有像é這樣的拼音字符時(shí),存入數(shù)據(jù)庫時(shí)會(huì)識(shí)別為e,造成部分關(guān)鍵詞沒有被導(dǎo)入,且與原來部分關(guān)鍵詞可能重復(fù)的情況,因此記錄下來避免以后再踩坑。
提示:以下是本篇文章正文內(nèi)容,下面案例可供參考
一、準(zhǔn)備工作
準(zhǔn)備一份批量導(dǎo)入關(guān)鍵詞excel,其中包含2個(gè)關(guān)鍵詞
1.pokemon
2.pokémon
注意:這2個(gè)關(guān)鍵詞中一個(gè)是普通的e,一個(gè)是帶音節(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)
簡單寫一個(gè)導(dǎo)入接口,代碼就不附上了,需要注意的是導(dǎo)入sql用的是INSERT IGNORE INTO的方式,如果表中已經(jīng)有該關(guān)鍵詞了則不會(huì)寫入表中。(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ī)則在識(shí)別é這種帶有音節(jié)的字符時(shí),會(huì)識(shí)別為e,導(dǎo)致2個(gè)關(guān)鍵詞在通過INSERT IGNORE INTO導(dǎo)入后只會(huì)有一條記錄,只要將排序規(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)字段時(shí)用LOWER()函數(shù)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
mysql無法啟動(dòng)服務(wù)及其他問題總結(jié)
MySQL無法啟動(dòng),可能有多種原因?qū)е?本文主要介紹了mysql無法啟動(dòng)服務(wù)及其他問題總結(jié),具有一定的參考價(jià)值,感興趣的可以了解一下2024-01-01
導(dǎo)致MySQL索引失效的一些常見寫法總結(jié)
這篇文章主要給大家介紹了關(guān)于導(dǎo)致MySQL索引失效的一些常見寫法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-09-09
mysql數(shù)據(jù)庫備份命令分享(mysql壓縮數(shù)據(jù)庫備份)
這篇文章主要介紹了mysql數(shù)據(jù)庫備份常用語句,包括數(shù)據(jù)庫壓縮備份、備份多個(gè)MySQL數(shù)據(jù)庫、備份多個(gè)MySQL數(shù)據(jù)庫、將數(shù)據(jù)庫轉(zhuǎn)移到新服務(wù)器等語句2014-01-01
linux mysql5.5升級(jí)至mysql5.7的步驟與踩到的坑
這篇文章主要介紹了linux mysql5.5升級(jí)至mysql5.7的詳細(xì)步驟,后面腳本之家小編為大家整理了多個(gè)補(bǔ)充,大家可以參考一下2021-01-01
MySQL服務(wù)無法啟動(dòng):failed to restart mysql.service:&
在系統(tǒng)更新或配置變更后,MySQL服務(wù)可能無法啟動(dòng),本文提供解決MySQL服務(wù)啟動(dòng)失敗的方法,包括檢查和更新服務(wù)單元文件,主要步驟包括檢查服務(wù)文件存在與否、備份舊的服務(wù)文件、使用最新的服務(wù)文件重啟MySQL服務(wù)等,確保服務(wù)能正常運(yùn)行,感興趣的可以了解一下2024-10-10
高效數(shù)據(jù)流轉(zhuǎn):Mycat分庫分表與GreatSQL實(shí)時(shí)同步
聚焦數(shù)據(jù)庫擴(kuò)容與實(shí)時(shí)數(shù)據(jù)同步,探索MyCat分庫分表與GreatSQL的強(qiáng)大結(jié)合!想在大規(guī)模數(shù)據(jù)處理中游刃有余?本指南將帶你輕松掌握MyCat的分布式解決方案和GreatSQL的實(shí)時(shí)同步機(jī)制,讓高效、穩(wěn)定的數(shù)據(jù)庫管理觸手可及,一起揭開高并發(fā)環(huán)境下數(shù)據(jù)庫優(yōu)化的神秘面紗吧!2024-01-01

