MySQL различные UTF – utf8_bin и utf8_general_ci
Чем же отличаются эти два collate для таблиц?
utf8_bin – использует сравнения по двоичным значениям каждого символа
utf8_general_ci – использует сравнения на основе языковых особенностей и игнорирует регистр символов.
Для наглядности приведем небольшой эксперимент.
CREATE TABLE peoples (
id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY ,
first_name VARCHAR( 255 ) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL ,
last_name VARCHAR( 255 ) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL
) ENGINE = INNODB CHARACTER SET utf8;
INSERT INTO peoples (first_name, last_name) VALUES ('Петя', 'Иванов'), ('андрей', 'иванов'), ('Иван', 'Петров'), ('Андрей', 'Сидоров');
INSERT INTO peoples (first_name, last_name) VALUES ('Петр', 'Большой'), ('Пётр', 'Большои');
id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY ,
first_name VARCHAR( 255 ) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL ,
last_name VARCHAR( 255 ) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL
) ENGINE = INNODB CHARACTER SET utf8;
INSERT INTO peoples (first_name, last_name) VALUES ('Петя', 'Иванов'), ('андрей', 'иванов'), ('Иван', 'Петров'), ('Андрей', 'Сидоров');
INSERT INTO peoples (first_name, last_name) VALUES ('Петр', 'Большой'), ('Пётр', 'Большои');