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无法启动,可能有多种原因导致,本文主要介绍了mysql无法启动服务及其他问题总结,具有一定的参考价值,感兴趣的可以了解一下
    2024-01-01
  • 导致MySQL索引失效的一些常见写法总结

    导致MySQL索引失效的一些常见写法总结

    这篇文章主要给大家介绍了关于导致MySQL索引失效的一些常见写法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-09-09
  • mysql数据库备份命令分享(mysql压缩数据库备份)

    mysql数据库备份命令分享(mysql压缩数据库备份)

    这篇文章主要介绍了mysql数据库备份常用语句,包括数据库压缩备份、备份多个MySQL数据库、备份多个MySQL数据库、将数据库转移到新服务器等语句
    2014-01-01
  • MySQL数据库怎么正确查询字符串长度

    MySQL数据库怎么正确查询字符串长度

    MySQL中字符串长度一般指数据库表中一个字段或列中存储的字符串的最大长度,有时我们需要测量字符串长度,来保证表结构及数据库性能稳定,下面这篇文章主要给大家介绍了关于MySQL数据库怎么正确查询字符串长度的相关资料,需要的朋友可以参考下
    2023-06-06
  • linux mysql5.5升级至mysql5.7的步骤与踩到的坑

    linux mysql5.5升级至mysql5.7的步骤与踩到的坑

    这篇文章主要介绍了linux mysql5.5升级至mysql5.7的详细步骤,后面脚本之家小编为大家整理了多个补充,大家可以参考一下
    2021-01-01
  • 浅谈mysql join底层原理

    浅谈mysql join底层原理

    本文文章主要介绍了浅谈mysql join底层原理,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-08-08
  • MySQL服务无法启动:failed to restart mysql.service: unit not found

    MySQL服务无法启动:failed to restart mysql.service:&

    在系统更新或配置变更后,MySQL服务可能无法启动,本文提供解决MySQL服务启动失败的方法,包括检查和更新服务单元文件,主要步骤包括检查服务文件存在与否、备份旧的服务文件、使用最新的服务文件重启MySQL服务等,确保服务能正常运行,感兴趣的可以了解一下
    2024-10-10
  • 深入MYSQL字符数字转换的详解

    深入MYSQL字符数字转换的详解

    本篇文章是对MYSQL中的字符数字转换进行了详细的分析介绍,需要的朋友参考下
    2013-06-06
  • 详解MySQL双活同步复制四种解决方案

    详解MySQL双活同步复制四种解决方案

    这篇文章主要介绍了MySQL 双活同步复制四种方案,主从复制分成三步,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2018-08-08
  • 高效数据流转:Mycat分库分表与GreatSQL实时同步

    高效数据流转:Mycat分库分表与GreatSQL实时同步

    聚焦数据库扩容与实时数据同步,探索MyCat分库分表与GreatSQL的强大结合!想在大规模数据处理中游刃有余?本指南将带你轻松掌握MyCat的分布式解决方案和GreatSQL的实时同步机制,让高效、稳定的数据库管理触手可及,一起揭开高并发环境下数据库优化的神秘面纱吧!
    2024-01-01

最新评论