当使用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转储从生产服务器导入我的开发环境时遇到了这个问题.
使用德语字符时应该使用排序规则utf8_unicode_ci,根据此 bug 中的讨论:Bug #39816 German collation under utf8_unicode_ci is invalid。
尽管有该错误的标题,但我刚刚在 5.6.15 上测试了这个,并且您的测试用例有效,而默认的 unicode 排序规则不起作用:
\n\nCREATE 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\');\nRun Code Online (Sandbox Code Playgroud)\n\nPS:我建议您使用与生产环境相同版本的所有软件的开发环境,或者至少共享相同的主要版本。如果您在 5.5 中进行开发,然后尝试部署到 5.0,那么您必然会遇到其他不兼容问题。
\n| 归档时间: |
|
| 查看次数: |
2278 次 |
| 最近记录: |