MySQL utf8 多字节(utf8mb4)插入重复条目问题

Posted

技术标签:

【中文标题】MySQL utf8 多字节(utf8mb4)插入重复条目问题【英文标题】:MySQL utf8 multibyte (utf8mb4) insert duplicate entry problem 【发布时间】:2021-11-22 12:44:44 【问题描述】:

我有两个单词('বাঁধা'和'বাধা')要插入到 mysql (8.0.12 - MySQL Community Server - GPL) 表中。 “বাঁধা”这个词插入正确。但是在插入'বাধা'时,mysql会报错:

INSERT INTO lc6_words(jp_word, jp_fcharascii) VALUES('বাঁধা', 2476);
/*Query OK*/
INSERT INTO lc6_words(jp_word, jp_fcharascii) VALUES('বাধা', 2476);
/*#1062 - Duplicate entry 'বাধা' for key 'jp_word'*/

表结构:

CREATE TABLE IF NOT EXISTS `lc6_words` (
  `jp_wkey` BIGINT NOT NULL AUTO_INCREMENT,
  `jp_word` varchar(255) NOT NULL,
  `jp_fcharascii` int UNSIGNED NOT NULL,
  `jp_word_occ` BIGINT UNSIGNED NOT NULL DEFAULT 1,
UNIQUE(`jp_word`),
  PRIMARY KEY (`jp_wkey`)
) ENGINE=MyISAM  DEFAULT CHARSET=UTF8MB4 COLLATE=utf8mb4_bin;

相关查询及其输出:

SELECT jp_wkey FROM lc6_words WHERE BINARY jp_word='বাঁধা';
/* 1 */
SELECT jp_wkey FROM lc6_words WHERE BINARY jp_word='বাধা';
/* Empty */

感谢您阅读本文。如果你分享你的想法,还有更多:)。

【问题讨论】:

试试这个:select jp_word from lc6_words where jp_wkey = 0;。您有一个主键为 0 的行,这在您有一个自增列时是不常见的。 对不起...一个错误。没有 0 键。已更新问题。 【参考方案1】:

整理似乎有问题。运行以下命令后,一切正常:

ALTER TABLE lc6_words MODIFY jp_word VARCHAR(191) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;

注意: VARCHAR 大小从 255 更改为 191。

【讨论】:

以上是关于MySQL utf8 多字节(utf8mb4)插入重复条目问题的主要内容,如果未能解决你的问题,请参考以下文章

浅谈MySQL中utf8和utf8mb4的区别

为啥MYSQL要设定用UTF8MB4编码UTF8MB4

Mysql报错UncategorizedSQLException无法插入表情

更改MySQL数据库的编码为utf8mb4

设置 MYSQL 数据库编码为 utf8mb4

mysql存储emoji表情报错的处理方法更改编码为utf8mb4