Проблема с encondig в Mysql - PullRequest
1 голос
/ 07 мая 2011

У меня есть следующая таблица:

CREATE TABLE IF NOT EXISTS `applications` (
    `id` int(11) NOT NULL AUTO_INCREMENT,
    `name` varchar(45) COLLATE utf8_unicode_ci DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

Я хочу сохранить значение «España» в поле «name».

У меня есть PHP ФАЙЛ (закодированный в UTF8) с формой, чтобы сохранить это. Когда я сохраняю «España», используя файл php, и я читаю из mysql с php, я вижу данные в порядке.

Но если перейти к PMA o Mysql Query Browser, я вижу это: "España"

Если я сохраняю его из PMA (с кодировкой UTF-8) или из браузера запросов MySQL, я вижу, что эти два инструмента работают нормально, но я вижу «Espa a» из PHP.

Я не понимаю, почему.

В байтах:

Если сохраняется из PHP, я вижу: C3 83 C2 B1 (для ñ)

Если сохраняется из MQB или PMA, я вижу: C3 B1 (для ñ)

Ответы [ 2 ]

0 голосов
/ 07 мая 2011

Проблема была в клиенте php mysql. Он использует latin1 в качестве кодировки для соединения, вы можете увидеть это с помощью:

echo mysql_client_encoding($con);

или

print_r(mysql_fetch_assoc(mysql_query("show variables like 'char%';")));

Есть два способа решить эту проблему:

mysql_set_charset("utf8");

или

mysql_query("SET CHARACTER SET 'UTF8'", $con); // data send by the server
mysql_query("SET NAMES 'UTF8'", $con); // data send by the client
0 голосов
/ 07 мая 2011

Запустите mysql_set_charset() перед выполнением запросов по открытому соединению.

mysql_set_charset("UTF-8");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...