恥知らずのウェブエンジニア -web engineer, shameless

これは一歩を踏み出すことができない者たちのブログ

The difference of default charset when connect to mysql with php

When the monitors the product if use codeigniter,fuelphp that PHP framework by New Relic, execute query SET NAMES foo when every connect to mysql.

This is not just problem, but execute when every connect and it was somehow eyesore, so I fix to don’t execute that query.

the code execute query SET NAMES foo

The case of codeigniter * mysqli, it is execute this code↓

CodeIgniter/mysqli_driver.php at 9e17059bf8d277058d1de23390e388b5fa0cc26a · bcit-ci/CodeIgniter · GitHub

This product use UTF-8 charset, and configure my.cnf too.

So I thought in the first place, this is not need it. comment out set_charset() for now. Then, don’t execute SET NAMES foo and don’t garbled.

Only one environment garbled characters

It' OK. just as planned. I apply other environment this fixing. one environment garbled characters. it seemed garbled by latin1.

There is difference in default charset by mysql library

The result i investigated, There is difference in default charset by mysql library.

PHP: Mysqlnd - Manual

MySQL :: MySQL PHP API :: 2.4 Choosing a library

PHP: Choosing a library - Manual

library default charset
mysqlnd the server default charset
libmysql charset selected when build(latin1 if no selected)

Finally, the cause of garbled is the server is used libmysql.

How to fix,

  • use mysqlnd
  • rebuild libmysql and select charset
  • select charset by mysqli_options (selectable charset without SET NAMES foo) PHP: mysqli::options - Manual

This is a minute thing, but it would be better a few query!