Chào mừng bạn đến vói vietvbb.vn. Hãy Đăng nhập hoặc Đăng Ký để tham gia thảo luận tại diễn đàn.



Page 2 of 2 FirstFirst 12
Results 16 to 23 of 23

Thread: Chuyển đổi database latin1 sang utf8 bằng code PHP hiển thị đúng unicode Tiếng Việt

  1. Chuyển đổi database latin1 sang utf8 bằng code PHP hiển thị đúng unicode Tiếng Việt Detail »»

  2. Chuyển đổi database latin1 sang utf8 bằng code PHP hiển thị đúng unicode Tiếng Việt

    • nguyenac's Avatar
    • nguyenac
    • Vietvbb's Friends
    • Friend
    • Join Date
      18 September 2007
      Location
      Tuy Hòa, PY
      Age
      34
      Posts
      2.122
      Thanks
      183
      Thanked 1.111 Times in 538 Posts
      Rep Power
      159
    Rating:  (0 votes - 0 average)
    Mình thấy vấn đề chuyển đổi charset và dữ liệu cũ cho database sang được thảo luận nhiều và có nhiều cách đưa ra, nhưng mình thấy vẫn chưa hiệu quả lắm.

    Bản thân mình cũng gặp phải tình trạng này khi mới lần đầu làm website.

    Sau một thời gian ... mò mẫm tìm hiểu tham khảo từ nhiều nguồn, mình viết được 1 code PHP nhỏ giúp làm việc chuyển đổi này. Sau khi chuyển đổi dữ liệu chứa tiếng việt sẽ hiển thị đúng unicode.

    1) Tiện ích :
    - Chỉ chạy 1 code php duy nhất chuyển đổi ngay chính database cần chuyển
    - Không phải làm việc backup, sửa collation thủ công rồi upload và import lại database
    - Có thể thấy ngay chữ tiếng việt trong phpmyadmin sau khi chuyển đổi

    2) Bất cập :
    - Chưa làm tự động cả database vì phải thêm table cần chuyển 1 cách thủ công.
    - Mặc dù trong database hiển thị đúng collation, charset là utf8_general_ci nhưng khi test thấy khi hiển thị trên trình duyệt hiện chưa đúng

    Những nhược điểm trên mong các bạn cùng nhau thảo luận và đưa ra cách giải quyết triệt để để code hoàn thiện hơn.

    PHP Code:
    <?php

    $db_server 
    'localhost';
    $db_user="user";
    $db_password="pass";
    $db_name "data";

    // Cac table can convert
    $table_names = array("table1""table2""table3""v.v..."); 

    // Ket noi CSDL
    mysql_connect($db_server$db_user$db_password) or die(mysql_error());
    mysql_select_db($db_name);
    // Thuc hien
    charset_fixer($table_names);

    function 
    charset_fixer($table_names){
      foreach(
    $table_names as $type){
        
    $ret[] = charset_fixer_fix_table($type);
      }
    }

    function 
    charset_fixer_fix_table($table) {
      
    $ret = array();
      
    $types = array('char' => 'binary',
                     
    'varchar' => 'varbinary',
                     
    'tinytext' => 'tinyblob',
                     
    'text' => 'blob',
                     
    'mediumtext' => 'mediumblob',
                     
    'longtext' => 'longblob');

      
    // du table tiep theo vao list
      
    $convert_to_binary = array();
      
    $convert_to_latin1 = array();
      
    $convert_to_utf8 = array();

      
    // thuc hien convert
      
    $result mysql_query('SHOW FULL COLUMNS FROM '$table .'');
      while (
    $column mysql_fetch_assoc($result)) {
        list(
    $type) = explode('('$column['Type']);
        if (isset(
    $types[$type])) {
          
    $names 'CHANGE `'$column['Field'] .'` `'$column['Field'] .'` ';
          
    $attributes ' DEFAULT '. ($column['Default'] == 'NULL' 'NULL ' :
                         
    "'"mysql_real_escape_string($column['Default']) ."' ") .
                        (
    $column['Null'] == 'YES' 'NULL' 'NOT NULL');
          
    $convert_to_binary[] = $names preg_replace('/'$type .'/i'$types[$type], $column['Type']) . $attributes;
          
    $convert_to_latin1[] = $names $column['Type'] .' CHARACTER SET latin1'$attributes;
          
    $convert_to_utf8[] = $names $column['Type'] .' CHARACTER SET utf8'$attributes;
        }
      }

      if (
    count($convert_to_binary)) {
        
    //dat collatoin table mac dinh thanh latin1
        
    mysql_query('ALTER TABLE '$table .' DEFAULT CHARACTER SET latin1');

        
    //Convert sang latin1
        
    mysql_query('ALTER TABLE '$table .' 'implode(', '$convert_to_latin1));
        
       
    //dat collatoin table mac dinh thanh utf8
        
    mysql_query('ALTER TABLE '$table .' DEFAULT CHARACTER SET utf8');
        
        
    //Convert latin1 sang binary
        
    mysql_query('ALTER TABLE '$table .' 'implode(', '$convert_to_binary));
        
        
    //Convert binary sang UTF-8
        
    mysql_query('ALTER TABLE '$table .' 'implode(', '$convert_to_utf8));
      }
    }
    ?>
    Convert thanh cong!
    Attached Images Attached Images
    Last edited by nguyenac; 27 January 2011 at 05:02 PM.

  3. The Following User Says Thank You to nguyenac For This Useful Post:

    nobitavn_102 (16 May 2011)

  4. Comments

  5. #16
    Join Date
    10 July 2008
    Posts
    38
    Thanks
    25
    Thanked 20 Times in 4 Posts
    Rep Power
    14
    Đoạn php này ngon, thanks chủ thớt, mình đã làm theo và khá ok, phần add lần lượt từng table có vẻ hay hơn vì ta sẽ cần làm lần lượt từng table nếu như data quá nặng gây lỗi maximum...
    nếu nhiều table có thể xuất list table ra rồi add cả list cho tiện cũng nhanh thôi ko phải lần lượt từng thằng 1 đâu mà lo code đây
    http://php.net/manual/en/function.mysql-list-tables.php


    Bạn thanhnam8x gì đó là admin mà ăn nói phản cảm quá, check đã rồi thì nói nhé. ko phải cái gì mình cũng biết cả đc đâu.

  6. #17
    Join Date
    24 January 2011
    Posts
    13
    Thanks
    0
    Thanked 2 Times in 2 Posts
    Rep Power
    0
    đây là đổi collaction sang chứ k phải charset bố ạ

    dùng code cho mệt ra, vào phpmyadmin chọn lại collaction là xong

    bó tay [IMG]images/smilies/SugarwareZ-070.gif[/IMG]Trích từ: www.vietvbb.vn&nbsp;




    __________________
    | thiet ke trang website | trang web doanh nghiep | chuong trinh thiet ke web | thiet lap trang web | nhan thiet ke web

  7. #18
    Join Date
    10 July 2008
    Posts
    38
    Thanks
    25
    Thanked 20 Times in 4 Posts
    Rep Power
    14
    Quote Originally Posted by CuteGirlVN View Post
    đây là đổi collaction sang chứ k phải charset bố ạ

    dùng code cho mệt ra, vào phpmyadmin chọn lại collaction là xong

    bó tay [IMG]images/smilies/SugarwareZ-070.gif[/IMG]Trích từ: www.vietvbb.vn&nbsp;
    __________________

    Người ta làm ko đc người ta mới nói, chém gió hoài

  8. The Following User Says Thank You to nobitavn_102 For This Useful Post:

    anhquyhaui (14 January 2012)

  9. #19
    Join Date
    18 September 2007
    Location
    Tuy Hòa, PY
    Age
    34
    Posts
    2.122
    Thanks
    183
    Thanked 1.111 Times in 538 Posts
    Rep Power
    159
    code chưa hiệu quả lắm nhưng ng ta thường có câu "Ko quan trọng quá trình, Cái chính là kết quả". Kết quả ok thì đc rồi, còn quá trình thì trình độ có hạn nên tới đó thôi, bồ nào viết tốt hơn thì share cho bà con, chứ nói nhiều làm gì

  10. #20
    Join Date
    29 December 2008
    Age
    32
    Posts
    29
    Thanks
    4
    Thanked 8 Times in 4 Posts
    Rep Power
    11
    Mìn chuyển song thì vào forum nó báo lỗi , và yêu cầu dùng file tools.php để sửa lại là sao nhỉ

  11. #21
    Join Date
    9 February 2010
    Posts
    47
    Thanks
    11
    Thanked 3 Times in 3 Posts
    Rep Power
    10
    báo lỗi này là sao vậy
    Parse error: parse error, expecting `T_STRING' or `T_VARIABLE' or `'$'' in C:\xampp\htdocs\convertlatin1touft8.php on line 21

  12. #22
    Join Date
    9 February 2010
    Posts
    47
    Thanks
    11
    Thanked 3 Times in 3 Posts
    Rep Power
    10
    mọi người cho hỏi có cách nào chuyển đổi toàn bộ dữ liệu từ utf8 sang latin1 lại ko
    Last edited by thanhluy; 13 August 2012 at 04:09 PM.

  13. #23
    Join Date
    13 September 2009
    Posts
    159
    Thanks
    147
    Thanked 10 Times in 8 Posts
    Rep Power
    12
    Mình đang bị tình trạng như bạn chủ thread nói, mà dùng script của bạn thì chỉ hiện màn hình trắng, ko thấy thông báo gì.
    Database của mình nặng quá, hơn 1GB
    Vietnam Ads - https://vietnamads.vn



Thread Information

Users Browsing this Thread

There are currently 1 users browsing this thread. (0 members and 1 guests)

Similar Threads

  1. [HELP] Cách Chuyển latin1 sang UTF8
    By TND in forum vB4 Thảo Luận Chung
    Replies: 0
    Last Post: 10 March 2012, 11:08 AM
  2. [HELP] Làm sao để chuyển Collation từ latin1_swedish_ci sang utf8?
    By TND in forum vB4 Thảo Luận Chung
    Replies: 1
    Last Post: 11 December 2011, 07:28 AM
  3. [HELP] Chuyển encoding của VBB sang composite unicode?
    By TraanfPhiVux in forum vB3 Thảo Luận Chung
    Replies: 1
    Last Post: 18 October 2010, 09:35 PM
  4. [HELP] Chuyển Database từ latin1 sang utf8
    By nesteacold in forum vB3 Thảo Luận Chung
    Replies: 9
    Last Post: 2 August 2009, 04:53 PM
  5. [HELP] Unicode hiển thị không đúng
    By namthanhtran in forum vB3 Thảo Luận Chung
    Replies: 2
    Last Post: 5 March 2009, 05:33 PM

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •