MySQL+PHPで日付指定SQLの結果がおかしい。
MySQL5.5とPHP Version 5.4.27(MySQL Client API version mysqlnd 5.0.10) でSQLのwhere句に日付を指定した場合に結果がおかしい。 具体的には次のようなSQLがおかしくなる。
SELECT count(*) from tblsample where dt >= '2014/01/01';
$hostname = "localhost";
$uname = "username";
$passwd = "userpasswd";
$dbname = "sampledb";
if( !$conn = mysql_connect( $hostname, $uname, $passwd ) ){
echo "mysql_connect failed.\n";
exit;
}
mysql_select_db( $dbname, $conn );
mysql_select_db( $dbname, $conn );
$queryres = mysql_query( "SELECT count(*) from tblsample where dt >= '2014/01/01'", $conn );
while( $row = mysql_fetch_array( $queryres, MYSQL_ASSOC ) )
{
var_dump( $row );
}
mysql_close( $conn ); // close
100件ほどはヒットするはずなのに、結果は3件だ。 phpMyAdminから同じSQLを実行してみると、100件以上の正しい結果が得られるので、PHP側でなにかがおかしいようだ。 ``` 原因は結局良くわからず、「mysql_set_charset(‘utf8’); 」を入れたら正しい結果が得られるようになった。
$hostname = "localhost";
$uname = "username";
$passwd = "userpasswd";
$dbname = "sampledb";
if( !$conn = mysql_connect( $hostname, $uname, $passwd ) ){
echo "mysql_connect failed.\n";
exit;
}
mysql_set_charset('utf8'); // ←これを追加!!
mysql_select_db( $dbname, $conn );
$queryres = mysql_query( "SELECT count(*) from tblsample where dt >= '2014/01/01'", $conn );
while( $row = mysql_fetch_array( $queryres, MYSQL_ASSOC ) ){
var_dump( $row );
}
mysql_close( $conn ); // close
なんでだろう。そのうちきちんと原因を理解したいが、