mysql通过INSERT IGNORE INTO插入拼音字符无效如何解决(INSERT IGNORE INTO,mysql,开发技术)

时间:2024-05-03 10:07:39 作者 : 石家庄SEO 分类 : 开发技术
  • TAG :

一、准备工作

准备一份批量导入关键词excel,其中包含2个关键词

1.pokemon

2.pokémon

注意:这2个关键词中一个是普通的e,一个是带音节的é

准备数据库表sql脚本

--导入关键词表
CREATETABLEkeyword_lexicon(
idint(10)NOTNULLAUTO_INCREMENT,
keywordvarchar(128)CHARACTERSETutf8mb4COLLATEutf8mb4_general_ciNOTNULLDEFAULT''COMMENT'搜索关键词',
PRIMARYKEY("id"),
UNIQUEKEY"idx_keyword"("keyword")USINGBTREECOMMENT'关键词'
)ENGINE=InnoDBDEFAULTCHARSET=utf8mb4COMMENT='导入关键词表';

二、场景复现

简单写一个导入接口,代码就不附上了,需要注意的是导入sql用的是INSERT IGNORE INTO的方式,如果表中已经有该关键词了则不会写入表中。(keyword字段设为唯一索引)

导入sql例子如下

INSERTIGNOREINTOkeyword_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插入拼音字符无效如何解决的详细内容,希望对您有所帮助,信息来源于网络。
上一篇:怎么用Node.js实现登陆注册功能下一篇:

10 人围观 / 0 条评论 ↓快速评论↓

(必须)

(必须,保密)

阿狸1 阿狸2 阿狸3 阿狸4 阿狸5 阿狸6 阿狸7 阿狸8 阿狸9 阿狸10 阿狸11 阿狸12 阿狸13 阿狸14 阿狸15 阿狸16 阿狸17 阿狸18