1

我有一个数据库,通过 php 脚本中的错误输入了很多值作为字符串“Null”而不是实际的 NULL 值。无论如何要在表中找到所有“空”字符串并将它们替换为 NULL 而不必搜索每一列?

4

3 回答 3

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 ;
于 2013-09-20T03:02:54.200 回答
1

应该很简单:

UPDATE tableName
SET columnName = NULL
WHERE columnName = 'Null'
于 2013-09-20T01:41:38.223 回答
0

不确定您所说的“不必搜索每一列”是什么意思。如果有很多列,并且您不想按照@john-conde 的建议多次运行查询,那么另一种方法是将数据库转储到纯文本文件中

 mysqldump -u<user> -p<password> --database <dbname> > dbdump.sql

这会将您的数据库作为纯文本转储到名称为 的文件中dbdump.sql。您可以在dbdump.sql. 您只需要特别注意要替换的内容和位置即可。您应该确保只替换重要的字符串。一旦你这样做了,你可以像这样将转储加载回mysql

mysql -u<user> -p<password> <dbname> < dbdump.sql

您也可以一次转储一张表 -> 修复它 -> 重新加载它。

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

于 2013-09-20T03:32:21.153 回答