我没有看到俄语数据,而是看到英语数据

时间:2014-09-14 15:09:40

标签: php mysql sql mysqli

我有俄语网站,而不是俄语数据我看到英语数据。

   <?php 
    $dbc_utf8 = mysqli_connect ("mysite.com", "xxxxxxxxxxx", "xxxxxxxxxxx", "xxxxxxxxxxx");
    mysqli_query($dbc_utf8, 'SET CHARACTER utf8');
    mysqli_query($dbc_utf8, 'SET NAMES utf8'); 
             /*  Installing Russian locale Connection */
             mysqli_query($dbc_utf8, "SET lc_time_names = 'ru_RU'") ;    
    ?>

我有数据库,我需要字段&#34; date_add&#34;在俄罗斯。在屏幕上我看到&#34; 2014年2月23日&#34;

CREATE TABLE `comment_common` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `parent_id` int(5) NOT NULL,
  `id_post` int(5) NOT NULL,
  `id_shop` int(5) NOT NULL,
  `name` varchar(200) CHARACTER SET utf8 NOT NULL,
  `comment` text CHARACTER SET utf8 NOT NULL,
  `date_add` datetime NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=11568 DEFAULT CHARSET=cp1251 AUTO_INCREMENT=11568 ;

在数据库中

$sql = "
        SELECT id, parent_id, name, comment,
        DATE_FORMAT(date_add, '%d %M %Y') as date_add
        FROM comment_common
";

2 个答案:

答案 0 :(得分:0)

从数据库中获取时间,并将其放在变量上。然后尝试以下代码:

如果您在服务器上运行Linux,请使用:

setlocale(LC_ALL, 'ru_RU.UTF-8');
echo strftime(); //PS down

您可以从here

了解如何使用此功能

如果您使用的是Windows:

<meta http-equiv="Content-Type" content="text/html; charset=windows-1251" />
setlocale(LC_ALL, 'russian');

答案 1 :(得分:0)

您应该运行这些查询,将它们放在一个SQL运行

$sql = "
SET lc_time_names = 'ru_RU'; 
SELECT id, parent_id, name, comment,
        DATE_FORMAT(date_add, '%d %M %Y') as date_add
        FROM comment_common;";

如果我在phpMyAdmin中以这种方式运行它,我用正确的语言显示它:14 Сентября 2014但是当我第一次运行第一个查询,然后是第二个查询时,我也有英文数据。

要获得所需的结果,您应该使用mysqli_store_result()函数,因此正确的代码是:

<?php

header('Content-Type: text/html; charset=utf-8');
$dbc_utf8 = mysqli_connect ("localhost", "root", "", "tests");
mysqli_query($dbc_utf8, 'SET CHARACTER utf8');
mysqli_query($dbc_utf8, 'SET NAMES utf8');
/*  Installing Russian locale Connection */
$sql = "
SET lc_time_names = 'ru_RU';
 SELECT id, parent_id, name, comment,
        DATE_FORMAT(date_add, '%d %M %Y') as date_add
        FROM comment_common
";

if (mysqli_multi_query($dbc_utf8, $sql)) {
    do {
        /* store first result set */
        if ($result = mysqli_store_result($dbc_utf8)) {
            while ($row = mysqli_fetch_assoc($result)) {
                echo $row['date_add'];
            }
            mysqli_free_result($result);
        }

    } while (mysqli_more_results($dbc_utf8) && mysqli_next_result($dbc_utf8));
}
?>

但是不太方便。看来代替SET lc_time_names = 'ru_RU',您应该使用SET GLOBAL lc_time_names = 'ru_RU'使其在普通代码中运行,因此更好的选择应该是:

<?php

header('Content-Type: text/html; charset=utf-8');
$dbc_utf8 = mysqli_connect ("localhost", "root", "", "tests");
mysqli_query($dbc_utf8, 'SET CHARACTER utf8');
mysqli_query($dbc_utf8, 'SET NAMES utf8');
/*  Installing Russian locale Connection */
mysqli_query($dbc_utf8, "SET GLOBAL lc_time_names = 'ru_RU'") ;

$sql = "
        SELECT id, parent_id, name, comment,
        DATE_FORMAT(date_add, '%d %M %Y') as date_add
        FROM comment_common
";

$result = mysqli_query($dbc_utf8, $sql);

$row = mysqli_fetch_assoc($result);

echo $row['date_add'];



?>

然而,在这种情况下,您需要管理员权限,但我不知道为什么,但此代码在首次运行时无效,从第2天开始以俄语返回日期。