準備一份批次導入關鍵字excel,其中包含2個關鍵字
1.pokemon
2.pokémon
注意:這2個關鍵字中一個是普通的e,一個是帶音節的é
準備資料庫表sql腳本
-- 导入关键词表 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 '搜索关键词', PRIMARY KEY ("id"), UNIQUE KEY "idx_keyword" ("keyword") USING BTREE COMMENT '关键词' ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='导入关键词表';
簡單寫一個導入接口,程式碼就不附上了,需要注意的是導入sql用的是INSERT IGNORE INTO的方式,如果表中已經有該關鍵字了則不會寫入表中。 (keyword欄位設為唯一索引)
匯入sql範例如下
INSERT IGNORE INTO keyword_lexicon (`keyword`) VALUES ('pokemon'),('pokémon')
調諧介面完成匯入後,檢視資料庫表,發現只有一條pokemon的資料。
檢視表格結構發現,keyword欄位的排序規則為
utf8mb4_general_ci
這種排序規則在辨識é這種有音節的字元時,會辨識為e,導致2個關鍵字在透過INSERT IGNORE INTO導入後只會有一筆記錄,只要將排序規則改為
utf8mb4_bin
然後再重新導入,查看結果可發現2條資料都已經插入表中,問題解決。
utf8mb4_bin是區分大小寫的,也區分e和é這類字元的
#utf8_genera_ci是不區分大小寫的,也不區分e和é這類字元
註:utf8_general_cs是區分大小寫的,但不區分e和é這類字元
如果需要區分有音節的字符,又不想要區分大小寫,可在sql查詢對應欄位時用LOWER()函數
以上是mysql透過INSERT IGNORE INTO插入拼音字元無效如何解決的詳細內容。更多資訊請關注PHP中文網其他相關文章!