mysql通过INSERT IGNORE INTO插入拼音字符无效问题及解决

 更新时间:2022年08月25日 10:40:31   作者:郑宇栋  
这篇文章主要介绍了mysql通过INSERT IGNORE INTO插入拼音字符无效问题及解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

前言

在做一个批量导入关键词的功能时,发现关键词如果带有像é这样的拼音字符时,存入数据库时会识别为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字段的排序规则为

  • 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如何清空慢查询文件

    MySQL如何清空慢查询文件

    这篇文章主要介绍了MySQL如何清空慢查询文件,如何在线生成一个新的慢查询文件,感兴趣的小伙伴们可以参考一下
    2015-12-12
  • MySQL source导入很慢的解决方法

    MySQL source导入很慢的解决方法

    在mysql导入数据量非常大的sql文件的时候,速度会非常慢,这篇文章主要给大家介绍了关于MySQL source导入很慢的解决方法,文中通过示例代码介绍的非常详细,需要的朋友可以参考下
    2022-03-03
  • MySQL笔记之修改数据的解决方法

    MySQL笔记之修改数据的解决方法

    本篇文章介绍了,在mysql中修改数据的解决方法。需要的朋友参考下
    2013-05-05
  • Mysql添加字段或索引导致锁表的处理方式

    Mysql添加字段或索引导致锁表的处理方式

    我们后端开发人员在实现业务修改时,经常需要更新数据库表结构,如增加字段、修改字段长度等等,下面这篇文章主要给大家介绍了关于Mysql添加字段或索引导致锁表的处理方式,需要的朋友可以参考下
    2023-05-05
  • mysql死锁(dead lock)与锁等待(lock wait)的出现解决

    mysql死锁(dead lock)与锁等待(lock wait)的出现解决

    死锁和锁等待是数据库运维中常见的问题,区别在于死锁会自动解除,而锁等待需要手动处理,本文就来介绍一下mysql死锁(dead lock)与锁等待(lock wait),感兴趣的可以了解一下
    2024-09-09
  • 一起来了解mysql数据库

    一起来了解mysql数据库

    大家好,本篇文章主要讲的是一起来了解mysql数据库,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下,方便下次浏览
    2021-12-12
  • mysql把查询结果按逗号分割的实现示例

    mysql把查询结果按逗号分割的实现示例

    使用MySQL数据库的GROUP_CONCAT函数,可以将查询结果按逗号或其他指定分隔符连接成字符串,这种方法适用于需要汇总数据并以字符串形式展示的场景,本文介绍了GROUP_CONCAT函数的基本用法和注意事项,感兴趣的可以了解一下
    2024-09-09
  • MySQL之MHA高可用配置及故障切换实现详细部署步骤

    MySQL之MHA高可用配置及故障切换实现详细部署步骤

    这篇文章主要介绍了MySQL之MHA高可用配置及故障切换实现详细部署步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-03-03
  • mysql中迅速插入百万条测试数据的方法

    mysql中迅速插入百万条测试数据的方法

    最近想到创建一个大量数据的测试环境,于是找了一下怎么插入100W条数据,我用的是20个字段
    2012-04-04
  • mysql学习之引擎、Explain和权限的深入讲解

    mysql学习之引擎、Explain和权限的深入讲解

    这篇文章主要给大家介绍了关于mysql学习之引擎、Explain和权限的相关资料,文中通过示例代码将引擎、Explain和权限介绍的非常详细,对大家学习或者使用mysql具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-06-06

最新评论