Problem With MySQL 4.1.x and Unicode (UTF8)

Collapse
This topic is closed.
X
X
 
  • Time
  • Show
Clear All
new posts
  • sinasalek

    Problem With MySQL 4.1.x and Unicode (UTF8)

    i have a problem with MySQL 4.1.x and UTF8.
    in version 4.0, i'm using html forms with utf8 charset for inserting
    unicode strings. but in version 4.1.x it is not working! if i change the
    charset of column,

    ALTER TABLE `icons` CHANGE `name_farsi` `name_farsi` VARCHAR( 99 )
    CHARACTER SET utf8 COLLATE utf8_persian_ci DEFAULT NULL

    and change default charset of database like below code :

    mysql_query("SE T CHARACTER SET utf8");

    -i see somthing like below (the strings in that columns are in utf8
    format) :

    $link=mysqli_co nnect('localhos t','root',null, 'database');
    mysqli_query($l ink, "SET CHARACTER SET utf8");
    if ($result = mysqli_query($l ink, "SELECT name_farsi FROM icons order by
    name_farsi"))
    {
    $charset = mysqli_characte r_set_name();
    while ($row = mysqli_fetch_ro w($result)) {
    echo("$row[0]"."<br>");
    }
    mysqli_free_res ult($result);
    }
    -----result-----
    Ø¨ÛŒÙ…Ø§Ø±Ø³ØªØ §Ù†
    راهنمای تور
    تورها
    کشتی رانی
    فرودگاه

    you can see the last line of above result, it's correct, becuse i inserted
    this record with phpMyAdmin v2.6.0. but the other result as you see, are
    not readable.

    when i trying to insert a record with below way :
    INSERT INTO `icons` ( `name_farsi`) VALUES
    ('سلام');
    -----result----
    ???
    ÓáÇã
    Ø¨ÛŒÙ…Ø§Ø±Ø³ØªØ §Ù†
    راهنمای تور
    تورها
    کشتی رانی
    فرودگاه


    as you see, the first line is not readable. if i convert that value to
    utf8 with utf8_encode(), i will see somthing between first result and end
    result!
    if i does not set default char set of ("SET CHARACTER SET utf8"), the
    result is :
    ???
    بیمارستان
    راهنمای تور
    تورها
    کشتی رانی
    ???????

    but this results , does not sort correctly! it is like that i'm using
    MYSQL 4.0 not MySQL 4.1.x
    how can i solve this problem?!
    please help me.


    -----------------------------
    -- Table structure for table `icons`
    --

    CREATE TABLE `icons` (
    `id` int(6) unsigned NOT NULL auto_increment,
    `name` varchar(100) character set latin1 default NULL,
    `name_farsi` varchar(100) character set utf8 collate utf8_persian_ci
    default NULL,
    `filename` varchar(100) character set latin1 default NULL,
    `sort_number` int(100) default NULL,
    `comment` varchar(255) character set latin1 default NULL,
    `comment_farsi` varchar(255) character set latin1 default NULL,
    PRIMARY KEY (`id`)
    ) ENGINE=MyISAM DEFAULT CHARSET=utf8;

    INSERT INTO `icons` VALUES (3, 'Airport',
    'فرودگاه', '3d
    icon/airport.gif', NULL, NULL, NULL);
    INSERT INTO `icons` VALUES (4, 'Tour Guide', 'تورها',
    'icon/eghamati.gif', NULL, NULL, NULL);
    INSERT INTO `icons` VALUES (5, 'Hospital',
    'بیمارست ان', 'bimarestan.gif ', NULL, NULL,
    NULL);
    INSERT INTO `icons` VALUES (6, 'Tours', '?', 'toor.gif', NULL, NULL,
    NULL);
    INSERT INTO `icons` VALUES (7, 'Ships', '?', 'kashtirani.gif ', NULL, NULL,
    NULL);

  • Mark

    #2
    Re: Problem With MySQL 4.1.x and Unicode (UTF8)

    sinasalek wrote:
    [color=blue]
    > i have a problem with MySQL 4.1.x and UTF8.
    > in version 4.0, i'm using html forms with utf8 charset for inserting
    > unicode strings. but in version 4.1.x it is not working! if i change the
    > charset of column,
    >
    > ALTER TABLE `icons` CHANGE `name_farsi` `name_farsi` VARCHAR( 99 )
    > CHARACTER SET utf8 COLLATE utf8_persian_ci DEFAULT NULL
    >
    > and change default charset of database like below code :
    >
    > mysql_query("SE T CHARACTER SET utf8");[/color]
    [el snip-o-rama!]

    I ran into the exact same problem some weeks back, and I've found that,
    for MySQL 4.1.x, x > 2, you have to use the following command to get the
    connection working properly:

    $mysqli->query("SET NAMES 'utf8'");

    which I suppose would be:

    mysql_query($li nk, "SET NAMES 'utf8'");

    there are four places you have to worry about charset:

    1. in your PHP script (set mbstring in PHP.ini to Unicode)
    2. in your database (looks like you got that covered)
    3. in the CONNECTION to your database (SET NAMES 'utf8')
    4. in the output to the client browser.


    good ruck!

    mark.




    --
    I am not an ANGRY man. Remove the rage from my email to reply.

    Comment

    • sinasalek

      #3
      Re: Problem With MySQL 4.1.x and Unicode (UTF8)

      hi,
      many thanks for your help.
      i tested your suggestion. but my problem not solved.
      My CODE :
      ini_set('mbstri ng.internal_enc oding','UTF-8');
      ini_set('mbstri ng.http_input', 'UTF-8');
      ini_set('mbstri ng.http_output' ,'UTF-8');
      ini_set('mbstri ng.internal_enc oding','UTF-8');

      $link=mysqli_co nnect('localhos t','root',null, 'database');
      //set character sets
      mysqli_query($l ink, "SET CHARACTER SET utf8");
      mysqli_query($l ink, "SET NAMES 'utf8'");
      //encdoe and then insert a persian work to "name_farsi " field.
      mysqli_query($l ink, "INSERT INTO `icons` ( `name_farsi`) VALUES
      ('".utf8_encode ('بهار')."');") ;
      //print records
      if ($result = mysqli_query($l ink, "SELECT name_farsi FROM icons order by
      name_farsi"))
      {
      while ($row = mysqli_fetch_ro w($result)) {
      echo $row[0]."<br>";
      }

      mysqli_free_res ult($result);
      }
      ------------------------------------------------------------------------------------------------------------------------
      i really confused and i don't know where is the problem!!
      you told me "I ran into the exact same problem some weeks back", can you
      tell me, what was your problem,exactly ? please.
      or can you give me, part of your code, like above code?
      or is there any forum that you were write about your problem?
      or is there any article about this problem?
      i will be very glad , if you answer my questions.
      (sorry for my bad english, and my strange questions)

      Comment

      • sinasalek

        #4
        Re: Problem With MySQL 4.1.x and Unicode (UTF8)

        Gergely Temesi <tgergely@freem ail.hu> send an email to me about this
        problem, and he noticed some important things.
        this problem solved with Mark <mw@ANGRYLanfea r.com> and Gergely help.

        Mark's solution :
        1. in your PHP script (set mbstring in PHP.ini to Unicode)
        2. in your database (looks like you got that covered)
        3. in the CONNECTION to your database (SET NAMES 'utf8')
        4. in the output to the client browser.

        Gergely wrote to me :
        He(Mark) missed only one thing: your text editor has to be set to UTF-8!
        For example in WinXP NotePad -> File -> Save as… -> Character coding
        -> UTF-8 (… or something like this in your own language).

        below example can explain solution clearly :
        ---------------------------------------------------------------------------------------------
        I added Gergely's solution to Mark's solution, and problem solved.
        here is my code (php file that contain below code is encoded by utf8) :

        <?php
        //this below three lines are not necessary, i tested without them and
        everything worked correctly.
        ini_set('mbstri ng.internal_enc oding','UTF-8');
        ini_set('mbstri ng.http_input', 'UTF-8');
        ini_set('mbstri ng.http_output' ,'UTF-8');

        $link=mysqli_co nnect('localhos t','root',null, 'test');
        //set character sets
        mysqli_query($l ink, "SET CHARACTER SET utf8");
        mysqli_query($l ink, "SET NAMES 'utf8'");

        //insert a persian word to "name|farsi " field.
        mysqli_query($l ink,"INSERT INTO `test` ( `name|farsi`) VALUES ('utf8
        string-->تست')");
        //print records
        if ($result = mysqli_query($l ink, "SELECT `name|farsi` FROM test order by
        `name|farsi`"))
        {
        while ($row = mysqli_fetch_ro w($result))
        echo $row[0]."<br>";
        mysqli_free_res ult($result);
        }
        ?>

        unbelievable, problem was my PHP Editor !!!!, i'm using Zend Studio and
        this PHP editor can't handle utf8!
        as Gergely told i tested with notepad , and i could insert a record with a
        UTF8 field easily and correctly!
        ---------------------------------------------------------------------------------------------
        good luck friends

        Comment

        • sinasalek

          #5
          Re: Problem With MySQL 4.1.x and Unicode (UTF8)

          Gergely Temesi <tgergely@freem ail.hu> send an email to me about this
          problem, and he noticed some important things.
          this problem solved with Mark <mw@ANGRYLanfea r.com> and Gergely help.

          Mark's solution :
          1. in your PHP script (set mbstring in PHP.ini to Unicode)
          2. in your database (looks like you got that covered)
          3. in the CONNECTION to your database (SET NAMES 'utf8')
          4. in the output to the client browser.

          Gergely wrote to me :
          He(Mark) missed only one thing: your text editor has to be set to UTF-8!
          For example in WinXP NotePad -> File -> Save as… -> Character coding
          -> UTF-8 (… or something like this in your own language).

          below example can explain solution clearly :
          ---------------------------------------------------------------------------------------------
          I added Gergely's solution to Mark's solution, and problem solved.
          here is my code (php file that contain below code is encoded by utf8) :

          <?php
          //this below three lines are not necessary, i tested without them and
          everything worked correctly.
          ini_set('mbstri ng.internal_enc oding','UTF-8');
          ini_set('mbstri ng.http_input', 'UTF-8');
          ini_set('mbstri ng.http_output' ,'UTF-8');

          $link=mysqli_co nnect('localhos t','root',null, 'test');
          //set character sets
          mysqli_query($l ink, "SET CHARACTER SET utf8");
          mysqli_query($l ink, "SET NAMES 'utf8'");

          //insert a persian word to "name|farsi " field.
          mysqli_query($l ink,"INSERT INTO `test` ( `name|farsi`) VALUES ('utf8
          string-->تست')");
          //print records
          if ($result = mysqli_query($l ink, "SELECT `name|farsi` FROM test order by
          `name|farsi`"))
          {
          while ($row = mysqli_fetch_ro w($result))
          echo $row[0]."<br>";
          mysqli_free_res ult($result);
          }
          ?>

          unbelievable, problem was my PHP Editor !!!!, i'm using Zend Studio and
          this PHP editor can't handle utf8!
          as Gergely told i tested with notepad , and i could insert a record with a
          UTF8 field easily and correctly!
          ---------------------------------------------------------------------------------------------
          good luck friends

          Comment

          Working...