首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >mySQL:索引表上的utf8字符集和重复键错误

mySQL:索引表上的utf8字符集和重复键错误
EN

Stack Overflow用户
提问于 2014-02-23 15:04:58
回答 3查看 3.1K关注 0票数 7

当使用用mySQL编码的varchar字段作为主键时,我已经预料到了utf8的奇怪行为。对于在我的开发环境中不相等的字符串,它由于重复键错误而失败。

一个简短的例子:

代码语言:javascript
复制
SET NAMES 'utf8';

CREATE TABLE `test` (
  `id` varchar(5) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

INSERT INTO `test` (`id`) VALUES ('das'), ('daß');

错误失败:Duplicate entry 'daß' for key 'PRIMARY'.

我使用默认配置在ubuntu13.10上运行mySQL 5.5.35。

在另一个mySQL服务器(5.0.95版)上,相同的查询没有失败。这是因为mySQL版本,还是有设置索引表编码的配置选项?

我在尝试将mySQL转储从生产性服务器导入到我的开发环境时遇到了这个问题。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-02-23 16:09:48

根据bug:utf8_unicode_ci中的讨论,使用德语字符时应该使用排序规则词义不正确

尽管有这个错误的标题,我只是在5.6.15上测试了它,您的测试用例可以工作,而默认的unicode排序规则不起作用:

代码语言:javascript
复制
CREATE TABLE `test` (
  `id` varchar(5) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 DEFAULT COLLATE=utf8_unicode_ci;

INSERT INTO `test` (`id`) VALUES ('das'), ('daß');

PS:我建议您使用与生产环境相同的所有软件版本的开发环境,或者至少共享相同的主要版本。如果您在5.5中开发,然后尝试部署到5.0,您肯定会遇到其他不兼容的情况。

票数 1
EN

Stack Overflow用户

发布于 2014-02-23 15:58:28

问题是数据库没有将daß重新配置为das,然后变成id的双重条目,而这只是一个测试表。

为什么不创建具有autoincrenebt和其他列名的列id,其中有这样的值:

代码语言:javascript
复制
SET NAMES 'utf8';
CREATE TABLE `test` (
`id` int(5) NOT NULL AUTO_INCREMENT PRIMARY KEY,
 `name` varchar(5)
 ) ENGINE=MYISAM DEFAULT CHARSET=utf8;

 INSERT INTO `test` (`name`) VALUES ('das'), ('daß');

看这里的演示

您的问题是一个与德国charcters讨论这里的错误。

票数 1
EN

Stack Overflow用户

发布于 2019-06-20 15:24:19

utf8_general_mysql500_ciutf8_general_ciß是否被视为等于s的问题上有所不同。

为了“修复”不兼容性,在utf8_general_mysql500_ci 5.1.62 / 5.5.21 / 5.6.5中添加了排序规则MySQL。

更多历史:_

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21969927

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档