Javascript-форум (https://javascript.ru/forum/)
-   Серверные языки и технологии (https://javascript.ru/forum/server/)
-   -   MySQl - кодировка (https://javascript.ru/forum/server/12574-mysql-kodirovka.html)

Golovastik 23.10.2010 23:55

MySQl - кодировка
 
В какой кодировке указывать надо, чтоб достало данные из майкл в русском виде а не знаками вопроса?
Что здесь поменять нужно?

danik.js 24.10.2010 00:23

Вобще обычно ставится utf8_general_ci
Но вопросики могут быть из-за несоответсвия заявленной на странице кодировки и действительной кодировки текста. Так же проблема может быть в неправильной кодировки соединения с бд и тд...

Golovastik 24.10.2010 00:32

Указал как вы написали и всё равно всё знаками вопроса.
Во как я соединяюсь:
<?php
$server = 'localhost'; //Имя сервера
$user = 'xai'; //Логин   
$password = '12345'; //Пароль
$db = 'video';
$table = 'lessons'; //Название таблицы
$error_database = '<h2>Произошла ошибка в базе данных,<br/>
в ближайшее время она будет устранена!</h2>';
$connect = mysql_connect($server,$user,$password);
if(!$connect){
echo $error_database;
exit;
};
//$connect по какому соединению мы работаем
$select = mysql_select_db($db,$connect);
if(!$select){
echo $error_database;
exit;
};
?>


Какую кодировку указывать для поля, которое вывожу?

B@rmaley.e><e 24.10.2010 00:48

После подключения выполните запрос
Код:

SET NAMES utf8

Golovastik 24.10.2010 00:56

Написал так
<?php
mysql_query("SET NAMES utf8");
$server = 'localhost'; //Имя сервера
$user = 'xai'; //Логин   
$password = 't37du78ah4'; //Пароль
$db = 'video';
$table = 'lessons'; //Название таблицы
$error_database = '<h2>Произошла ошибка в базе данных,<br/>
в ближайшее время она будет устранена!</h2>';
$connect = mysql_connect($server,$user,$password);
if(!$connect){
echo $error_database;
exit;
};
//$connect по какому соединению мы работаем
$select = mysql_select_db($db,$connect);
if(!$select){
echo $error_database;
exit;
};

?>


Стало не знаками вопроса выдавать, а вот такими уже буквами.
Случилось то, чего так долго ждали РІ Рунете, РЅРѕ чего РЅРёРєРѕРіРґР° ранее еще РЅРµ было!..РџСЂРѕРёР·РѕС€ »Рѕ РїРѕ истине эпохальное событие!.. Невероятный, потрясающий подарок всем, кто интересуется заработками РІ Сети!..

monolithed 24.10.2010 10:01

Во-первых нужно посмотреть сами таблицы ели в них тоже крякозябры, то нужно самому документу задать кодировку и посмотреть чтобы каждая таблица соответствовала при мерно такой строчке:

ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;


к примеру:

CREATE TABLE `elements` (
  `id` int(11) NOT NULL auto_increment,
  `title` varchar(255) NOT NULL,
  `name` longtext NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

danik.js 24.10.2010 10:36

Цитата:

Сообщение от Golovastik
Стало не знаками вопроса выдавать, а вот такими уже буквами.
Случилось то, чего так долго ждали РІ Рунете, РЅРѕ чего РЅРёРєРѕРіРґР° ранее еще РЅРµ было!..РџСЂРѕРёР·РѕС€ �»Рѕ РїРѕ истине эпохальное событие!.. Невероятный, потрясающий подарок всем, кто интересуется заработками РІ Сети!..

Цитата:

Случилось то, чего так долго ждали в Рунете, но чего никогда ранее еще не было!..Произош? ?ܐޠпо истине эпохальное событие!.. Невероятный, потрясающий подарок всем, кто интересуется заработками в Сети!
Текст то в utf-8 теперь, но http-заголовок, отсылаемый твоим сервером, говорит о другом...

ЗЫ: И чтоже это за эпохальное событие такое? Головастик полез прогать в похапе?

Gozar 24.10.2010 11:21

Цитата:

Сообщение от danik.js (Сообщение 75636)
Текст то в utf-8 теперь

а вот это ещё вопрос, в utf-8 ли?!
при смене кодировки таблицы или её строк нужно и саму таблицу перезалить(экспорт импорт), иначе она останется в той кодировке в которой была, несмотря на то что будет стоять utf-8.

Если вы работает с ajax то utf-8 важно, если просто выборка и вывод то можно и в cp1251. Важно чтобы кодировка в базе соответствовала кодировке указанной в странице в тегах(для utf-8):
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta http-equiv="Content-Language" content="ru">


А также сами данные были в той же кодировке.

Если вы всё проверили, а данные всё ещё не читабельны.
смотрите заголовки посылаемые сервером
на сервер заголовки устанавливаются либо через apache либо в самом php скрипте:
header("Content-type: text/html; charset=utf-8");

Gozar 24.10.2010 11:28

Цитата:

Сообщение от Golovastik (Сообщение 75606)
Написал так
<?php
mysql_query("SET NAMES utf8");
$server = 'localhost'; //Имя сервера
$user = 'xai'; //Логин   
$password = 't37du78ah4'; //Пароль
$db = 'video';
$table = 'lessons'; //Название таблицы
$error_database = '<h2>Произошла ошибка в базе данных,<br/>
в ближайшее время она будет устранена!</h2>';
$connect = mysql_connect($server,$user,$password);
if(!$connect){
echo $error_database;
exit;
};
//$connect по какому соединению мы работаем
$select = mysql_select_db($db,$connect);
if(!$select){
echo $error_database;
exit;
};

?>

А как это вы делаете запрос к базе(mysql_query("SET NAMES utf8")), до соединения с ней?

сначала mysql_connect, mysql_select_db и только потом mysql_query

Golovastik 26.10.2010 02:53

Вот полное состояние моей базы, выражены на фото.

У меня есть файл 1.php в нём такой код:


Код:

<?php
include '../blocks/database.php';  /*Соединяемся с Базой Данных*/
       

?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<link rel="stylesheet" type="text/css" href="style.css" />
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251" />
<title>Видеокурсы по заработку в Интернет</title>
</head>
<body>

<!--Шапка сайта -->
<?php include '../blocks/header.php' ?>

<!--Левая навигация-->
<?php include '../blocks/navigator_left_zar_v_internet.php' ?>
 
<!--Правая навигация-->
<?php include '../blocks/navigator_right_zar_v_internet.php' ?>
       
<!--Контент-->
<?php include '../blocks/kontent1.php' ?>
       

<!--Copyright-->
<?php include '../blocks/footer.php' ?>       

</body>
</html>

Через файл kontent1.php я вывожу всё с базы на экран, вот содержимое
kontent1.php


Код:

<div class="center">
<div class="zagolovok">Компьютерные видеокурсы для начинающих</div> <br />
<?php
include '../blocks/database.php';  /*Соединяемся с Базой Данных*/
?>
 
                               
<?php
//Число постов выводящих на странице
$num = 3;
@$page = $_GET['page'];
if(empty($page)){
$page = 1;
}
 
 
$result = mysql_query("select COUNT(*) FROM lessons2",$connect);
$posts = mysql_result($result,0);
//Находим общее количество страниц
$chislo_str = intval(($posts-1)/$num)+1;
$page = intval($page);
//empty($page) Если переменной не существует или ее значение равно нулю
if(empty($page) or $page<0) $page = 1;
if($page > $chislo_str) $page = $chislo_str;
// Если ввести $page=7  тогда 7*3-3=18 
//с 18 поста будет выводится пост 18,19,20 на странице №7
$start = $page * $num - $num; 
 
 
/*--------------------Выводов Постов--------------------------------------*/
 
if ( isset ( $_GET['id'] ) ) {
       
        //Увеличиваем заданный счетчик
        $update = mysql_query ( "UPDATE `lessons2` SET `lessons2`.`obnovlenie` = `lessons2`.`obnovlenie` + 1 WHERE `lessons2`.`id` = {$_GET['id']} LIMIT 1" ) or die ( mysql_error() );
 
        //Запрос на выборку из нашей таблицы
        $query = mysql_query ( "SELECT * FROM `lessons2` WHERE `lessons2`.`id` = {$_GET['id']} LIMIT 1" ) or die ( mysql_error() );
 
        //Получаем результат
        $resalt = mysql_fetch_assoc ( $query );
 
        //Выводим полную новость
               
                echo $resalt['podrobnosti'];
               
                // '<br /><a href="', $_SERVER['HTTP_REFERER'], '" title="Назад">Назад</a>';
 
}
else{
 
        //Запрос на выборку из нашей таблицы
 
$query = mysql_query ( "SELECT * FROM lessons2 LIMIT $start, $num" ) or die ( mysql_error() );
while ( $resalt = mysql_fetch_assoc ( $query ) ) {
 
  echo $resalt['text'],  '</a> <span class="prosmotrov" style="line-height:45px;">Просмотров: <span class="green schetok1">',$resalt['obnovlenie'], '</span></span> ';
  }
       
 
 
//------------------------------------------------
// Стрелка назад 
if($page>1)
$nazad= '<a class="knopka_nazad1" href= ./1.php?page='.($page-1).'>Назад</a>';
else $nazad= '<span class="knopka_nazad2">Назад</span>';
         
//Стрелка вперед 
if($page<$chislo_str)
$vpered = '<a class="knopka_vpered1" href= ../videolessons/1.php?page='.($page + 1).'>Вперёд</a>';
else $vpered= '<span class="knopka_vpered2">Вперёд</span>';
 
// Вывод меню 
$expand_to = 4; // сколько страниц должно показываться слева и справа от текущей
 
// начало и конец "соседних" страниц
$a = $page - $expand_to; if ($a < 1) $a = 1;
$b = $page + $expand_to; if ($b > $chislo_str) $b = $chislo_str;
 
if ($a > 1) // надо ли показывать отдельно ссылку на первую и "..."
{
        $navigation[] = "<a href=\"./1.php?page=1\">1</a>";
        if ($a > 2) $navigation[] = "...";
}
 
// генерируем ссылки на "соседние" страницы
for ($i = $a; $i <= $b; $i++)
        $navigation[] = ($page == $i) ? '<span class="tek_str">'.$i.'</span>' : "<a class='str_nav' href=\"./1.php?page=$i\">$i</a>";
 
if ($b < $chislo_str) // надо ли показывать отдельно "..." и ссылку на последнюю
{
        if ($b < $chislo_str - 1) $navigation[] = '...';
        $navigation[] = "<a href=\"./1.php?page=$chislo_str\">$chislo_str</a>";
}
 
// выводим готовую навигацию
echo '<div class="navig"'.$nazad.'&nbsp;&nbsp; '.implode(' ', $navigation).'&nbsp;&nbsp;'.$vpered.'</div>';
}
?>
 
<!---------------------------------------------------------------------------->
               
       

                       
               
</div>

<!---------------------------------------------------------------------------->

Файл database.php
Код:

<?php
 
$server = 'localhost'; //Имя сервера
$user = 'xai'; //Логин 
$password = '12345'; //Пароль
$db = 'video';
$table = 'lessons'; //Название таблицы
$error_database = '<h2>Произошла ошибка в базе данных,<br/>
в ближайшее время она будет устранена!</h2>';
$connect = mysql_connect($server,$user,$password);

if(!$connect){
echo $error_database;
exit;
};
//$connect по какому соединению мы работаем
$select = mysql_select_db($db,$connect);
if(!$select){
echo $error_database;
exit;
};

?>

На локальном компьютере всё достаёт русским, как пробую на
phpmyadmin 5 версии(там хостинг), такие кракозябры вылетают, уже не знаю что делать.





Часовой пояс GMT +3, время: 02:00.