LINUX.ORG.RU

История изменений

Исправление 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. И это означает, что данные от клиента могут идти в одной кодировке, сервер отдавать их клиенту может в другой, а хранить в базе вообще в третьей. Чтобы избежать этого зоопарка –