首頁  >  文章  >  資料庫  >  mysql透過INSERT IGNORE INTO插入拼音字元無效如何解決

mysql透過INSERT IGNORE INTO插入拼音字元無效如何解決

王林
王林轉載
2023-05-31 19:55:04897瀏覽

一、準備工作

準備一份批次導入關鍵字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的資料。

mysql透過INSERT IGNORE INTO插入拼音字元無效如何解決

三、解決問題

檢視表格結構發現,keyword欄位的排序規則為

  • utf8mb4_general_ci

mysql透過INSERT IGNORE INTO插入拼音字元無效如何解決

這種排序規則在辨識é這種有音節的字元時,會辨識為e,導致2個關鍵字在透過INSERT IGNORE INTO導入後只會有一筆記錄,只要將排序規則改為

  • utf8mb4_bin

mysql透過INSERT IGNORE INTO插入拼音字元無效如何解決

然後再重新導入,查看結果可發現2條資料都已經插入表中,問題解決。

mysql透過INSERT IGNORE INTO插入拼音字元無效如何解決

總結

  • utf8mb4_bin是區分大小寫的,也區分e和é這類字元的

  • #utf8_genera_ci是不區分大小寫的,也不區分e和é這類字元

註:utf8_general_cs是區分大小寫的,但不區分e和é這類字元

如果需要區分有音節的字符,又不想要區分大小寫,可在sql查詢對應欄位時用LOWER()函數

以上是mysql透過INSERT IGNORE INTO插入拼音字元無效如何解決的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:yisu.com。如有侵權,請聯絡admin@php.cn刪除