PHP-PDO: Como usar UTF-8 com MySQL e PDO

<?php
$hostname = 'nome_servidor';
$username = 'nome_usuario';
$password = 'senha';
$database = 'nome_banco';
 
try {
    $pdo = new PDO("mysql:host=$hostname;dbname=$database;charset=utf8", $username, $password,
    array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"));
    echo 'Conexao efetuada com sucesso!';
}
catch(PDOException $e){
    echo $e->getMessage();
}					
?>

20 comentários em “PHP-PDO: Como usar UTF-8 com MySQL e PDO

  • 25 de junho de 2016 em 10:33
    Permalink

    Cara, você resolveu meus problemas. Antes eu usa iso-8859-1 e não tinha problema com caracteres acentuado no meu bd, mas vi que a maioria dos sites usam utf-8 e resolvi aderir também, mas os dados no bd sempre vinha com acentuação errada, o problema era só no bd, nas páginas view ficava tudo certo, mas ver as tabelas no bd erradas me deixava incomodado. Agora, graças a você está tudo certo. Obrigado

    Resposta
  • 4 de março de 2018 em 8:22
    Permalink

    show, muito bom, claro e objetivo, parabéns!

    Resposta
  • 4 de março de 2018 em 8:25
    Permalink

    Linhadecomando sempre dando show, continuem assim!

    Resposta
  • 7 de março de 2018 em 17:02
    Permalink

    Vlw pelo compartilhamento.
    S2
    Abraços!

    Resposta
  • 4 de maio de 2018 em 18:49
    Permalink

    Minha BD está configurada com UTF-8:
    $DB_conn = new PDO(‘mysql:host=’ . $DB_host . ‘; dbname=’ . $DB_name, $DB_user, $DB_pass);
    $DB_conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $DB_conn->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
    $DB_conn->exec(‘set names utf8’);

    e tenho uma Tabela que preciso inserir dados com acentos:
    ‘CREATE TABLE `’ . $DB_table2 . ‘` (
    `cliente` varchar(50) DEFAULT NULL,
    `endereco` varchar(100) DEFAULT NULL,
    … outros campos …
    ) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE latin1_swedish_ci;’

    Quando tento inserir dados com acentos no campo ‘endereço’
    $sql2 = ‘INSERT INTO ‘ . $DB_table2 . ‘ (`cliente`, `endereco`) VALUES (“‘ . $p_cliente . ‘”, “‘ . $p_end . ‘”)’;
    $rs2 = $DB_conn->prepare($sql2);
    $rs2->execute();

    recebo a seguinte mensagem de erro:

    Fatal error: Uncaught PDOException: SQLSTATE[22001]: String data, right truncated: 1406 Data too long for column ‘endereco’ at row 1 in C:\Sistema\of_query.php:26 Stack trace: #0

    Entretanto a informação que está sendo inserida para teste é curta, apenas o nome da cidade com acento: “Ji-Paraná”

    Resposta
  • 4 de abril de 2019 em 11:18
    Permalink

    Cara, me salvou!! Muito obrigado!

    Resposta
  • 31 de outubro de 2019 em 15:10
    Permalink

    Mandou bem demais!!!

    Salvou mais um

    Resposta
  • 1 de abril de 2020 em 12:27
    Permalink

    Cara, eu não sei como te agradecer. Eu não sou da área, mas faço algumas coisas para agilizar meu trabalho. Criar um certificado por exemplo, usando o PHP Word… Nada para uso externo, só meu. As vezes a gente pergunta para alguma alguma coisa e a pessoa diz para gente estudar… Eu fico feliz quando vejo alguém como você ensinando, sem julgar e apresentado uma solução que funciona!

    OBRIGADO. MIL VEZES OBRIGADO!

    Resposta
  • 3 de novembro de 2020 em 17:41
    Permalink

    Cara, eu nem costumo comentar esses posts. Mas esse aqui salvou vidas. Tô quase 24 horas sem dormir tentando resolver esse problema. Muito Obrigado!

    Resposta

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *