Задать вопрос

Почему в mysql не вставляется utf8 кириллица?

Здравствуйте, Господа! Предлагаю вашему вниманию следующую ерунду:

Вот такой вот запрос для mysql в коде php:
INSERT INTO `reg` (id_old, family, name, otchestvo, login, pass)
VALUES ('4042', 'Петров', 'Иван', 'Иванович', 'Ivan', 'a7a243c93ce27bc36a1ece83e4fd0801');


После выполнении этого запроса в базе на месте фамилии имени и отчества возникают либо крякозябры, либо пустые строки. Никаких ошибок не выводится. Ну и совсем чуть-чуть деталей:

1) Сам php файл в кодировке utf8.
2) В начале php файла присутствует строка header('Content-Type: text/html; charset=utf-8');
3) Вся база, сама таблица, и все три этих поля в кодировке utf8_general_ci;
4) После подключения к БД я выполняю вот эту бороду:
mysql_query("SET NAMES UTF8");
mysql_query("SET CHARACTER SET UTF8");
mysql_query("SET collation_connection='utf8_general_ci'");
mysql_query("SET collation_database='utf8_general_ci'");
mysql_query("SET collation_server='utf8_general_ci'");
mysql_query("SET character_set_client='utf8'");
mysql_query("SET character_set_connection='utf8'");
mysql_query("SET character_set_database='utf8'");
mysql_query("SET character_set_results='utf8'");
mysql_query("SET character_set_server='utf8'");

5) Если убрать вышеупомянутую бороду в базе оказываются крякозябры вида Ïåòðîâ Èâàí, с бородой же вместо кириллических строк вставляется ничто.
6) Перед передачей в базу я вывожу запрос на экран - кириллица отображается шикарно. Передаю в базу - кириллицы нет.

Есть идеи у экспертов? Что не так или куда копать?
  • Вопрос задан
  • 29099 просмотров
Подписаться 7 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 6
Как вы проверяете, что записалось в базу?
попробуйте utf8_unicode_ci вместо utf8_general_ci

UPD
коль скоро скрипт через крон
попробуйте запустить его как
/usr/bin/php -d mbstring.func_overload=2 -d mbstring.internal_encoding=UTF-8 -f /var/www/путь/к/скрипту
Ответ написан
@whats
Попробуйте с помощью расширения PDO подключиться к базе.
$db = new PDO("mysql:host=localhost;dbname=ХХХ;charset=UTF8", "логин" ,"пароль");
И далее с помощью PDO вставить любую строку с кириллицей.
Если так не получится то добавьте строку -
$db->setAttribute(PDO::MYSQL_ATTR_INIT_COMMAND,'SET NAMES utf8');

Отпишите результат. Далее разберемся с вашим расширением
Ответ написан
@Yago
mysql_query("SET NAMES 'utf8'");
mysql_query("SET CHARACTER SET 'utf8'");
апострофы
Ответ написан
@mazgolom345
mysql_set_charset('utf-8'); 100% rabotait
Ответ написан
Комментировать
@time20132503
Ребята, не обязательно сетить именно юникод, это в зависимости от ситуации. Я вот например парсил сайт один. Использовал PDO. И никакой там

$dbh->exec("set names utf8");

не помогал. Вместо кириллицы пустая строка забивается, и всё тут. Пока не догадался открыть исходник сайта и не увидел, что там указан cp1251. Ну и соответственно забил в set names её.
Ответ написан
Комментировать
oscarhandsome
@oscarhandsome
developer
Вообще ответы вверху какие то не НРАВЯТСЯ мне! Вот тут есть пояснения, и можно грамотно разрулить свою ситуацию.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы