Почему в PDO вопросительные знаки вместо русских букв при вставке данных в бд?

В php использую pdo для коннекта к бд, в php файле указано , в mysql везде стоит режим сравнения utf8_general_ci, использую такой код:

$db = new PDO("mysql:host=localhost;dbname=site", "root", "123");
$db->exec("SET NAMES utf8");
$stmt = $db->prepare("INSERT INTO news (title, text, date) VALUES (?, ?, ?)");
$stmt ->execute(array($_GET['title'], $_GET['txt'], $_GET['date']));

И все равно в бд заходят вопросы вместо русских букв, почему?
  • Вопрос задан
  • 7053 просмотра
Решения вопроса 1
alexyat
@alexyat
iOS Developer
у меня решилось все пересозданием бд
if(!mysql_select_db($dbname))
{
    mysql_query("CREATE DATABASE $dbname CHARACTER SET utf8 COLLATE utf8_general_ci") or die('2');
}

и перед запросом в бд делаю
mysql_query("SET NAMES 'utf8'");
все
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
FanatPHP
@FanatPHP
Чебуратор тега РНР
"в бд заходят" - это не слишком корректное описание проблемы.
Если все сделано именно так, как написано, то в БД входят нормальные символы. И надо тогда проверять, что при просмотре выбрана правильная кодировка.

Но скорее всего всё-таки где-то в базе utf8 не указана. "Везде", кстати никакого значения не имеет. Важно только то, что стоит в описании таблицы/полей. Посмотреть можно через
CREATE TABLE table_name
Подробнее можно почитать здесь: Проблемы с кодировкой в MySQL
К PDO эта проблема прямого отношения отношения не имеет.

PS. Не принципиально, но лучше задавать кодировку в DSN, а не отдельным запросом
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы