MySQL:将整理从utf8_bin更改为utf8_unicode_ce
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了MySQL:将整理从utf8_bin更改为utf8_unicode_ce,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1456字,纯文字阅读大概需要3分钟。
内容图文
![MySQL:将整理从utf8_bin更改为utf8_unicode_ce](/upload/InfoBanner/zyjiaocheng/907/c45ccb2da5c5459a805243bdaa0b1402.jpg)
给定一个完整的表,如何将排序从utf8_bin更改为utf8_unicode_ce?由于“重复输入错误”,正常的“更改”查询不起作用.例如,有两个条目
David Hussa
和
David Hu?a
我知道他们是一样的.是否有一种优雅的方式告诉MySQL“合并”这些托管?我应该提一下,条目的id在其他表中用作引用,因此MySQL也必须尊重它.或者我必须以漫长而烦人的方式执行此操作:手动合并每个重复,然后更改排序规则?
该表如下所示:
delimiter $$
CREATE TABLE `authors` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(100) COLLATE utf8_bin NOT NULL,
`count` int(11) NOT NULL DEFAULT '1',
PRIMARY KEY (`id`),
UNIQUE KEY `name_UNIQUE` (`name`),
FULLTEXT KEY `name_FULLTEXT` (`name`)
) ENGINE=MyISAM AUTO_INCREMENT=930710 DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='Stores all authors from dblp.xml.'$$
解决方法:
您可以删除重复的条目:
DELETE a2
FROM authors a1
JOIN authors a2
ON a2.name COLLATE UTF8_GENERAL_CI = a1.name COLLATE UTF8_GENERAL_CI
AND a2.id < a1.id
请注意,如果您的表很大,这可能需要很长时间.
这样做会更好:
>删除UNIQUE约束
>更改整理
>在名称上创建一个简单的非唯一索引
>运行查询(不带COLLATE子句):
DELETE a2
FROM authors a1
JOIN authors a2
ON a2.name = a1.name
AND a2.id < a1.id
>删除索引
>重新创建UNIQUE约束.
要更新引用表,请在删除条目之前运行此查询:
UPDATE child c
JOIN (
(
SELECT name COLLATE utf8_unicode_ci AS name_ci, MAX(id) AS mid
FROM authors
GROUP BY
name_ci
) pa
JOIN authors a
ON a.name COLLATE utf8_unicode_ci = name_ci
)
ON c.author = a.id
SET author = mid;
在所有引用表上.
内容总结
以上是互联网集市为您收集整理的MySQL:将整理从utf8_bin更改为utf8_unicode_ce全部内容,希望文章能够帮你解决MySQL:将整理从utf8_bin更改为utf8_unicode_ce所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。