用NULL替换'Null'

时间:2013-09-20 01:40:32

标签: mysql null

我有一个数据库,通过php脚本中的错误输入了很多值作为字符串'Null'而不是实际的NULL值。有没有找到表中的所有'Null'字符串并用NULL替换它们而不必搜索每一列?

3 个答案:

答案 0 :(得分:1)

应该如此简单:

UPDATE tableName
SET columnName = NULL
WHERE columnName = 'Null'

答案 1 :(得分:1)

如果您想使用一个update和多列:

UPDATE t
    SET col1 = (case when col1 = 'NULL' then NULL else col1 end),
        col2 = (case when col2 = 'NULL' then NULL else col2 end),
        ... ;

如果您有很多列并且不想编写所有代码,则可以运行如下查询:

select replace('XXX = (case when XXX = \'NULL\' then NULL else XXX end),',
               'XXX', column_name)
from information_schema.columns
where table_name = YOURTABLENAME ;

答案 2 :(得分:0)

不确定你的意思是“而不是必须搜索每一列”。如果有很多列,并且您不希望按照@ john-conde的建议多次运行查询,那么替代方法是使用

将数据库转储为纯文本文件
 mysqldump -u<user> -p<password> --database <dbname> > dbdump.sql

这会将您的数据库作为纯文本转储到名为dbdump.sql的文件中。您可以在dbdump.sql上使用您熟悉的任何查找/替换技术(例如sed,awk,perl,vi)。您只需要特别注意要更换的内容和位置。您应该确保只替换重要的字符串。一旦你这样做,你可以像这样

将转储加载回mysql
mysql -u<user> -p<password> <dbname> < dbdump.sql

您也可以一次转储一个表格 - &gt;修复它 - &gt;加载它。

如果您在生产中执行此操作,则需要进行额外的预防措施,以确保在执行此操作时不会对db进行写入操作。 mysqldump在命令行上采用了其他几个选项,这有助于转储数据库的一致快照。