2010-11-05 115 views
2

我正在处理一个数据库,其中有NULL''(空)值的混合。我想将所有空值转换为NULLMySQL:整个数据库,将[空]值转换为NULL

喜欢的东西

UPDATE table SET col=NULL WHERE col='' 

而且对整个数据库


笔记:

  • 我已经改变了默认值设为NULL

  • 我很清楚空VS'的争论,这是不是我真的想进入(很多其他的问题,对SO为)

+2

你的意思是'山坳= NULL'。 – 2010-11-05 12:49:56

+3

有几张桌子?是否有理由不能复制/粘贴上述语句并更改每个表的表名?如果没有理由变得复杂......不要。 – 2010-11-05 12:50:18

+0

@Justin说什么。这可能可以使用'INFORMATION_SCHEMA'来完成,但是如果它不是一个重复的任务,请快速复制并粘贴 – 2010-11-05 12:51:00

回答

2

这为我工作:

$tables = {array of table names}; 

foreach($tables as $t){ 
    $cols = FALSE; 
    $q = "SELECT * FROM $t LIMIT 1"; 
    $res = mysql_query($q); 
    while ($r = mysql_fetch_array($res, MYSQL_ASSOC)){  
     $cols = array_keys($r); 
    } 
    if($cols){ 
     foreach($cols as $c){ 
      $q2 = "UPDATE $t SET $c=NULL WHERE $c = ''"; 
      mysql_query($q2); 
      echo mysql_error(); 
     } 
    } 
} 
1

可能的最快方法只是转储,使用文本编辑器搜索/替换,然后加载。

2

有可能是一个更好的解决方案,但你总是可以做一个基地的mysql转储,然后解析.sql文件,用NULL替换''。为了解析,您可以用定制的PHP脚本,或者一些其他的方式 - 这部分应该不难:)