前言
在做一个批量导入关键词的功能时,发现关键词如果带有像é这样的拼音字符时,存入数据库时会辨认为e,造成部份关键词没有被导入,且与原来部份关键词可能重复的情况,因此记录下来避免以后再踩坑。
提示:以下是本篇文章正文内容,下面案例可供参考
一、准备工作
准备一份批量导入关键词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字段的排序规则为
这类排序规则在辨认é这类带有音节的字符时,会辨认为e,致使2个关键词在通过INSERT IGNORE INTO导入后只会有一条记录,只要将排序规则改成
然后再重新导入,查看结果可发现2条数据都已插入表中,问题解决。
总结
- utf8mb4_bin是辨别大小写的,也辨别e和é这类字符的
- utf8_genera_ci是不辨别大小写的,也不辨别e和é这类字符
注:utf8_general_cs是辨别大小写的,但不辨别e和é这类字符
如果需要辨别带有音节的字符,又不想要辨别大小写,可在sql查询对应字段时用LOWER()函数
以上为个人经验,希望能给大家一个参考,也希望大家多多支持。
文章来源:丸子建站
文章标题:mysql通过INSERT IGNORE INTO插入拼音字符无效问题及解决
https://www.wanzijz.com/view/59050.html