Автор Тема: Проблем с енкодинга в mysql  (Прочетена 4102 пъти)

Gloxi

  • Участници
  • ***
  • Публикации: 5
    • Профил
Проблем с енкодинга в mysql
« -: Feb 12, 2007, 11:24 »
Здравейте,

правя една страница на PHP, Smarty и Mysql. Искам да я подкарам с utf8 енкодинг, но не се получава. Четох темите във форума, свързани с енкодинга, но решение за проблема ми не намерих (или не съм го видяла '<img'> )

Таблицата е следната:
CREATE TABLE s_districts (
        disID int(9) NOT NULL  auto_increment,
        disName varchar(40) character set utf8 collate utf8_general_ci NOT NULL,
        PRIMARY KEY (disID)
) ENGINE = MYISAM;

В кода ,след като се вържа към mysql-a, първото нещо което правя, е

$sql = "SET NAMES UTF8";
        $quere = mysql_query($sql) or die("Query failed: " . mysql_error());

Ето и част от header-a, който изпращам:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

В резултат на всичко енкодинга на страницата е Cyrillic(windows-1251), надписите на полетата са на кирилица, но съдържанието им е маймуници.

Най-вероятно проблемът за някой може да е глупав и лесно разрешим, но аз не откривам решението. Така че бъдете така добри да ми отговорите, ако може по-подробно '<img'>

Mysql 4.1.14
PHP 4.4.0
Slackware 10.2
Активен

neter

  • Global Moderator
  • Напреднали
  • *****
  • Публикации: 3408
  • Distribution: Debian, SailfishOS, CentOS
  • Window Manager: LXDE, Lipstick
    • Профил
    • WWW
Проблем с енкодинга в mysql
« Отговор #1 -: Feb 12, 2007, 11:43 »
А ако смениш ръчно от браузъра енкодинга да бъде UTF-8, какво става?
Активен

"Да си добре приспособен към болно общество не е признак за добро здраве" - Джиду Кришнамурти

Gloxi

  • Участници
  • ***
  • Публикации: 5
    • Профил
Проблем с енкодинга в mysql
« Отговор #2 -: Feb 12, 2007, 11:48 »
Статичният текст на страницата излиза като квадратчета, а данните от mysql-a като маймуница
Активен

PAIN1

  • Напреднали
  • *****
  • Публикации: 432
    • Профил
Проблем с енкодинга в mysql
« Отговор #3 -: Feb 12, 2007, 19:28 »
Струва ми се излишно куерито със сетване на утф8.

Как пълниш информацията, в смисъл през форма или ръчно от файл. Да не се получава така да инсъртваш едно кодиране, а да изискваш друго.
Активен

Somma

  • Напреднали
  • *****
  • Публикации: 30
    • Профил
Проблем с енкодинга в mysql
« Отговор #4 -: Feb 13, 2007, 12:38 »
Цитат
$sql = "SET NAMES UTF8";
        $quere = mysql_query($sql) or die("Query failed: " . mysql_error());
Пробвай следното:

mysql_query ('SET NAMES UTF8', $yourDB);
mysql_query ('SET COLLATION_CONNECTION=UTF8_GENERAL_CI', $yourDB);

Вчера, като манна небесна, прочетох поста на dayassen от предишната по въпроса, и така както тои го е описал (по-горе) стана както трябва! Остава въпросът „Защо PHP парсера е направен така идиотски?”, че да е нужно всеки път да пиша тия редове! <!--emo&:(--><img src="http://www.linux-bg.org/iB_html/non-cgi/emoticons/sad.gif" border="0" valign="absmiddle" alt=':('><!--endemo-->

Успех! :B

p.s. Header-a си ти е наред! Само 2-рия ред от по-горните изпускаш!

P.S.p.s. За базата нещата са си така, т.е. проблема е в PHP!
« Последна редакция: Jan 22, 2009, 21:49 от zeridon »
Активен

Gloxi

  • Участници
  • ***
  • Публикации: 5
    • Профил
Проблем с енкодинга в mysql
« Отговор #5 -: Feb 13, 2007, 16:18 »
Мерси на всички за съветите, но PAIN1 налучка проблема. Вкарвам данните от файл. Проблемът е, че като си настройвах системата, не можах да накарам конзолата да бачка със utf-8 шрифт. Проблемът си остана и забравих за него - използвам windows-1251, за да пиша на кирилица. Явно, за да проработи, ще трябва да остраня и този проблем.
Активен

PAIN1

  • Напреднали
  • *****
  • Публикации: 432
    • Профил
Проблем с енкодинга в mysql
« Отговор #6 -: Feb 13, 2007, 21:11 »
Дано съм бил от полза '<img'>
Активен

angie_bg

  • Напреднали
  • *****
  • Публикации: 842
  • Distribution: Ubuntu 10.04
  • Window Manager: Gnome
    • Профил
    • WWW
Re: Проблем с енкодинга в mysql
« Отговор #7 -: Jan 22, 2009, 15:00 »
Къде хостваш страницата?
Преди време имах подобни проблеми (със статична страница) с hit.bg - поддържат само ср-1251, каквото и др. кодиране да се зададе в хедъра, не се приема и всичко излиза на маймуница. Провери в тази посока. Успех!
Активен

tyuio

  • Гост
Re: Проблем с енкодинга в mysql
« Отговор #8 -: Jan 22, 2009, 19:02 »
Все още не разбирам причината поради която щом си определила в главата на документа енкодинга да е утф8, браузера да я вижда уин-1251. После какъв е енкодинга на самата наза данни не на таблицата. Както каза нетер пробваи повечето възможни кодировки от браузера дали може да разберем кой е все пак енкодинга. После ако имаш phpmyadmin виж дали той вижда коректно данните в таблиците ти. На мен лично само веднъж ми се е случвало такова нещо на един безплатен хостинг каквато и кодировка да задавам все цп1251 виждаше после се оказа че самия хостинг не поддържа утф8 но това е друга изтория.
Активен

tyuio

  • Гост
Re: Проблем с енкодинга в mysql
« Отговор #9 -: Jan 22, 2009, 19:16 »
опаааа два пъти
« Последна редакция: Jan 22, 2009, 23:34 от tyuio »
Активен

DNAeon

  • Напреднали
  • *****
  • Публикации: 20
    • Профил
    • WWW
Re: Проблем с енкодинга в mysql
« Отговор #10 -: Jan 22, 2009, 19:50 »
Здравей,

Като за начало, защо просто не си направиш цялата база данни с UTF-8 encoding?

Ето ти пример, как можеш да си направиш базата данни:
Код:
CREATE DATABASE s_disctricsts_db DEFAULT CHARACTER SET utf8;

И таблицата в базата:
Код:
CREATE TABLE s_districts (
        disID int(9) NOT NULL  AUTO_INCREMENT PRIMARY KEY,
        disName varchar(40) NOT NULL
) ENGINE = MYISAM;

Аз лично си пиша функции, които да инициализират винаги базата данни преди да правя каквото и да било с тях. Ето ти и една примерна функция за инициализиране на базата:

Код:
function Init_www_db (&$your_db)
{
      /* промени си само настройките за базата данни */
      $your_db_host = 'localhost';
      $your_db_port = '3306';
      $your_db_name = 'database_name';
      $your_db_user = 'your_user';
      $your_db_pass = 'your_password';

      /* свързване с базата */
      $articles_db = mysql_connect ("your_db_host:$your_db_port", $your_db_user, $your_db_pass);
      $articles_db_selected = mysql_select_db ($your_db_name, $your_db);
      if (!$articles_db || !$articles_db_selected) {
         echo 'Не мога да се свържа с базата данни в момента. Моля опитайте по-късно.';
         exit (1);
      }

      mysql_query ('SET NAMES UTF8', $your_db);
}

И един въпрос - защо използваш Mysql 4.1.14 и PHP 4.4.0? За PHP 4.x вече няма поддръжка, най-добре си обнови php до по-нова версия.

Поздрави!
Активен

http://www.freebsd.org/ - The Power to Serve!
http://www.unix-heaven.org/ - Spread the Knowledge!
http://www.daemonforums.org/ - Don't Panic!

Подобни теми
Заглавие Започната от Отговора Прегледи Последна публикация
MySql малък проблем.
Хардуерни и софтуерни проблеми
Marto 6 4419 Последна публикация Sep 25, 2002, 12:32
от
mysql въпрос
Настройка на програми
dumi 0 1350 Последна публикация Oct 08, 2003, 06:42
от dumi
Perl + CGI,DBI + Mysql ili PHP + Mysql
Общ форум
jica 3 5116 Последна публикация Sep 07, 2004, 17:02
от jica
Mysql проблем със стартирането(mysql.sock missing)
Настройка на програми
coveka 6 6928 Последна публикация Mar 01, 2008, 22:02
от coveka
Mysql: can't connect to local mysql server
Настройка на програми
wonder 1 5305 Последна публикация Mar 16, 2008, 01:17
от neter