История изменений
Исправление znenyegvkby, (текущая версия) :
Отвечаю как и обещал.
Но только принудительной установкой «всё в UTF8» такие траблы не решаются по-моему.
Если ты хочешь, чтобы _клиенты использовали установленную тобой_ кодировку через --default-charset-set, стартуй сразу сервер с опцией --skip-character-set-client-handshake. После этого серверу станет откровенно пофиг на информацию о кодировках, посылаемую клиентом. Он эти данные будет просто _игнорировать_. Т.е. соединение _гарантированно_ будет установлено в той кодировке, которая тебе необходима.
Далее, что касается описанной тобой ситуации:
Если же MySQL-сервер игнорирует попытки клиента установить кодировку, а она несовместима с UTF-8 (например, тот же cp1251), то клиент будет слать бинарные данные в однобайтовой кодировке, а сервер будет считать, что принял UTF-8
Для этого и существует SET NAMES, который укажет серверу, в какой кодировке данные будет слать _клиент_. Естественно, что это будет работать только на current-connection. И это означает, что данные от клиента могут идти в одной кодировке, сервер отдавать их клиенту может в другой, а хранить в базе вообще в третьей. Чтобы избежать этого зоопарка – переходи уже на одну :)
Исходная версия znenyegvkby, :
Отвечаю как и обещал.
Но только принудительной установкой «всё в UTF8» такие траблы не решаются по-моему.
Если ты хочешь, чтобы _клиенты использовали установленную тобой_ кодировку через --default-charset-set, стартуй сразу сервер с опцией --skip-character-set-client-handshake. После этого серверу станет откровенно пофиг на информацию о кодировках, посылаемую клиентом. Он эти данные будет просто _игнорировать_. Т.е. соединение _гарантированно_ будет установлено в той кодировке, которая тебе необходима.
Далее, что касается описанной тобой ситуации:
Если же MySQL-сервер игнорирует попытки клиента установить кодировку, а она несовместима с UTF-8 (например, тот же cp1251), то клиент будет слать бинарные данные в однобайтовой кодировке, а сервер будет считать, что принял UTF-8
Для этого и существует SET NAMES, который укажет серверу, в какой кодировке данные будет слать _клиент_. Естественно, что это будет работать только на current-connection. И это означает, что данные от клиента могут идти в одной кодировке, сервер отдавать их клиенту может в другой, а хранить в базе вообще в третьей. Чтобы избежать этого зоопарка –