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

jel*_*han 7 mysql utf-8

当使用utf8中编码的varchar字段作为主键时,我曾期望mySQL有一种奇怪的行为.对于在我的开发环境中不相等的字符串,它会出现重复键错误.

一个简短的例子:

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ß');
Run Code Online (Sandbox Code Playgroud)

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

我使用默认配置在ubuntu 13.10上运行mySQL 5.5.35.

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

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

Bil*_*win 1

使用德语字符时应该使用排序规则utf8_unicode_ci,根据此 bug 中的讨论:Bug #39816 German collat​​ion under utf8_unicode_ci is invalid

\n\n

尽管有该错误的标题,但我刚刚在 5.6.15 上测试了这个,并且您的测试用例有效,而默认的 unicode 排序规则不起作用:

\n\n
CREATE TABLE `test` (\n  `id` varchar(5) NOT NULL,\n  PRIMARY KEY (`id`)\n) ENGINE=InnoDB DEFAULT CHARSET=utf8 DEFAULT COLLATE=utf8_unicode_ci;\n\nINSERT INTO `test` (`id`) VALUES (\'das\'), (\'da\xc3\x9f\');\n
Run Code Online (Sandbox Code Playgroud)\n\n

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

\n