PDO e MySQL com UTF-8

Posted by cristianmedeiros

Se você esta usando PDO, esta tendo dificuldades com UTF-8 no seu MySQL, mesmo com tudo setado para UTF-8, você pode tentar isso:

$pdo = new PDO(
    ‘mysql:host=localhost;dbname=nomedobanco’,
    "user",
    "pass",
    array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"));

 

O último parametro do construtor do PDO é um array com as opções específicas do driver, no caso, do driver od MySQL. Este parametro é alimentado no velho estilo "array" chave=>valor.

Observem que o parametro (PDO::MYSQL_ATTR_INIT_COMMAND) não se trata de uma configuração de charset, mas sim de um comando que é executado todas as vezes que você conecta no banco. Neste caso, todas as vezes que ele se conecta no banco, ele executa a query "SET NAMES utf8" (acho que é específica do MySQL) que diz para o MySQL utilizar UTF-8 como charset para nossa conexão.

Para saber mais:

Fonte:
http://www.laszlo.nu/post/34159352/how-to-use-utf-8-with-mysql-and-php-data-objects-pdo

Tags BlogBlogs: php, pdo, mysql, utf8, unicode

 

Posted in: Banco de Dados, PHP Comments(0) November 2008

On duplicate key update

Posted by cristianmedeiros

Tá ai um recurso que achei magnifico no MySQL 5, talvez não seja mais novidade para niguém, mas para mim foi bem interessante descobrir que não preciso mais fazer um update na minha abstração de dados, posso fazer tudo com insert e caso uma das chaves já esteja cadastrada o MySQL dispara um update.

O procedimento é muito simples, basta que você tenha uma primary key ou um index único e você poderá utilizar esta técnica.

Exemplo:

INSERT INTO table (a,b,c) VALUES (1,2,3) ON DUPLICATE KEY UPDATE c=c+1;

O comando acima irá atualizar a coluna c com o valor de c+1 quando a primary ou o index for duplicado.

Você pode indicar outros campos para serem atualizados também.

Exemplo:

INSERT INTO table (a,b,c) VALUES (1,2,3) ON DUPLICATE KEY UPDATE c=c+1, b=now();

É uma técnica simples, mas que pode ganhar muito tempo de projeto dependendo da sua aplicação.

Para saber mais:
 


Tags BlogBlogs: mysq, banco de dados, duplicate key

Posted in: Banco de Dados Comments(1) July 2008

Deadlock no Postgres

Posted by cristianmedeiros

Caros, algumas vezes uma de minhas aplicações que roda na madrugada, me envia uma mensagem de deadlock no banco, é uma aplicação em VB (iéca :( ) e suas mensagens são geradas pelo ODBC (iéca de novo) sendo assim eu não tenho 100% de certeza que é um deadlock real.

Para saber isso eu fiz um sistema de log que armazena as tabelas que estão com algum nível de lock quando a aplicação dispara, a query para saber isso é:

select relname, mode from pg_locks, pg_class where relation = pg_class.oid

Estou compartilhando aqui porque achei dificil de acha-la.

 

abs

 

Tags BlogBlogs: postgres, deadlock, lock, query, banco de dados, db

Posted in: Banco de Dados Comments(0) June 2008