返回顶部
首页 > 资讯 > 数据库 >mysql通过INSERT IGNORE INTO插入拼音字符无效问题及解决
  • 286
分享到

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

2024-04-02 19:04:59 286人浏览 薄情痞子
摘要

目录前言一、准备工作二、场景复现三、解决问题总结前言 在做一个批量导入关键词的功能时,发现关键词如果带有像é这样的拼音字符时,存入数据库时会识别为e,造成部分关键词没有被导入,且与原来部分关键词可能重复的情

前言

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

调接口完成导入后,查看数据库表,发现只有一条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()函数

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

您可能感兴趣的文档:

--结束END--

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

本文链接: https://lsjlt.com/news/33849.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作