Я был дураком. SET NAMES отсутствует.
Что я знаю сейчас:
1) Каждый раз, когда изменяется кодировка столбца, фактические данные ВСЕГДА перекодируются! Измените поле на двоичное, чтобы увидеть это.
2) Кодировка столбца предшествует !, таблица и кодировка дБ следуют в приоритете. Они используются в основном для установки значений по умолчанию. (не уверен на 100% в последнем предложении)
3) SET NAMES
очень важно. Немецкие символы могут входить в латиницу 1 и помещаться правильно в таблицу utf8 (перекодируется Mysql молча), когда вы правильно УСТАНАВЛИВАЕТЕ ИМЕНА. Сервер может отправлять данные на веб-страницу в нужной вам кодировке независимо от кодировки таблицы. Может быть перекодирован для вывода
4) Если есть столбец в кодировке A и столбец в кодировке B, и вы сравниваете их (или используете LIKE), Mysql автоматически преобразует их так, чтобы они выглядели как в одной кодировке
5) Mysql умный. Он никогда не работает с текстом как с байтами, если тип не является двоичным . Он всегда действует как персонажи! Он хочет, чтобы ё в latin1 равнялось бы ё в utf8, если он знает кодировку данных