Когда вы указываете кодировку , например utf8
для столбца, это означает, что MySQL будет использовать эту кодировку для хранения текста. Когда вы указываете кодировку символов по умолчанию для базы данных или таблицы, это означает, что их столбцы будут иметь эту кодировку, если вы не скажете иначе. Это влияет на число байтов , которые данные будут занимать на диске: в латинице 1 это 1 байт на символ, в sjis 2 байта, в utf8 оно меняется. Если вы храните много текста на японском языке, вы можете использовать sjis вместо utf8.
Когда вы указываете параметры сортировки , такие как utf8_general_ci
для столбца, это означает, что MySQL будет сортировать данных по-разному в ORDER BY или индексах. В культурах есть разные правила сортировки текста: например, в шведском Ä это вторая по последнему буквенная буква алфавита, в то время как в английском это эквивалентно A. Таким образом, при шведском сопоставлении вы получаете
И все же то, что делает сервер MySQL, не влияет на то, как клиент MySQL возвращает текст: каждое соединение имеет свою собственную клиентскую кодировку . Клиент автоматически преобразует результаты в кодировку соединения, поэтому вам не нужно заботиться о том, что делает сервер. Фактически вы можете сделать выборку со столбцами в разных кодировках, и клиент MySQL правильно преобразует все в utf8 или что-то еще.
Так что вам действительно нужно беспокоиться о настройке кодировки соединения, что и делает ваш # 3. Вероятно, SET NAMES в # 4 также работает, но я бы на это не полагался.