2010-02-22 45 views
3

我目前有一堆使用MySQL 5.1.x數據庫中的latin1字符集的表。問題是,我們最近有一羣用戶試圖使用UTF-8編碼輸入文本,而這似乎破壞了事情。更改現有MySQL數據庫上的字符集

盲目更新表的字符集安全嗎?對於這樣的情況,有哪些最佳實踐(除了明顯支持所有事情之外)?

回答

0

這裏是一個PHP代碼的和平是在現有表更改編碼:

<?php 
    $table_name = 'some_table'; 
    $from = 'latin1'; 
    $to = 'utf8'; 

    $q = 'SELECT * FROM '.$table_name; 
    //get data from mysql table 
    $data = mysql::array_qw($q) or die('Cound not select: '.mysql_error()); 

    for ($i = 0; $i < count($data); $i++) 
    { 
     $q = 'UPDATE '.$table_name.' SET '; 

     foreach($data[$i] as $key=>$value) 
     { 
      $q.= $key.' = '."'".iconv($from, $to, mysql_real_escape_string($value))."', "; 
     } 
     $q[strlen($q)-2] = ' '; 

     $q.= $key = "WHERE id = ".$data[$i]['id']; 
     mysql_query($q) or die(mysql_error()); 
    } 
?> 

它得到的所有數據,將其轉換,然後更新數據庫表。 (mysql :: array_qw函數將mysql查詢結果轉換爲數組)

相關問題