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)驗(yàn),希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
mysql設(shè)置值timestamp獲取當(dāng)前時間并自動更新方式
這篇文章主要介紹了mysql設(shè)置值timestamp獲取當(dāng)前時間并自動更新方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-07-07golang實(shí)現(xiàn)mysql數(shù)據(jù)庫備份的操作方法
這篇文章主要介紹了golang實(shí)現(xiàn)mysql數(shù)據(jù)庫備份的操作方法,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下2018-06-06MySQL使用命令創(chuàng)建、刪除、查詢索引的介紹
今天小編就為大家分享一篇關(guān)于MySQL使用命令創(chuàng)建、刪除、查詢索引的介紹,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧2019-03-03修改MySQL的數(shù)據(jù)庫引擎為INNODB的方法
本文主要介紹了修改MySQL的數(shù)據(jù)庫引擎為INNODB的方法,希望能對您有所幫助。2015-09-09MySQL視圖的概念、創(chuàng)建、查看、刪除和修改詳解
視圖是指計(jì)算機(jī)數(shù)據(jù)庫中的視圖,是一個虛擬表,其內(nèi)容由查詢定義,下面這篇文章主要給大家介紹了關(guān)于MySQL視圖的概念、創(chuàng)建、查看、刪除和修改的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-08-08