2010-02-22 47 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查询结果转换为数组)

相关问题