現在デバッグしようとしているクエリの GROUP BY に問題があることに気付きました。次の構造のDBテーブルがあります(実際の生活から縮小):
CREATE TABLE IF NOT EXISTS `product_variants` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`product_id` int(11) unsigned NOT NULL DEFAULT '0',
`pid_merchant` varchar(50) NOT NULL,
`checksum` char(32) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `checksum` (`checksum`),
KEY `product_id` (`product_id`),
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
このテーブルには、次の 2 つの行があります (数百万の行があります)。
INSERT INTO `product_variants` (`id`, `product_id`, `pid_merchant`, `checksum`) VALUES
(525555236, 628702710, 'ARTüöäß111', 'af5334b1193bf171580c70813ac83327'),
(525555241, 628702710, 'ARTüöäß222', 'cfe50fd9c3ca29fd957b839892313f82');
私が現在デバッグしているクエリはpid_merchant
、非常に単純な方法で、に基づいてこのテーブルで重複するエントリを見つけようとしています:
SELECT count(*), pv.* FROM product_variants pv WHERE pv.pid_merchant != '' GROUP BY pv.pid_merchant HAVING count(*) > 1
私の問題は、実際のpid_merchant
値が異なっていても、これらの結果が両方とも一致することです.一方は111で終わり、もう一方は222で終わります。この問題にアプローチする方法を知っている人はいますか? MD5() と HEX() によるグループ化、照合順序の latin1_german2_ci への変更、バイナリまたは utf8 変換の強制、その他多くの方法でグループ化を試みました。
もう 1 つの奇妙な点は、グループ化中に Y と Ü (大文字の U とウムラウト) の値を混同しているように見えることです (たとえば、ABC-Y と ABC-Ü はグループ化時に同一と見なされます)。
サーバーは Ubuntu x64 で MySQL 5.5 を実行しています。
mysqld Ver 5.5.29-0ubuntu0.12.04.2-log for debian-linux-gnu on x86_64 ((Ubuntu))