PHPスクリプトのエラーにより、実際のNULL値ではなく文字列「Null」として多くの値が入力されたデータベースがあります。各列を検索する代わりに、テーブル内のすべての 'Null' 文字列を見つけて NULL に置き換える方法はありますか?
3 に答える
次のように単純にする必要があります。
UPDATE tableName
SET columnName = NULL
WHERE columnName = 'Null'
update
1つまたは複数の列でそれを行いたい場合:
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 ;
「各列を検索する代わりに」とはどういう意味かわかりません。多くの列があり、@ john-conde が提案するようにクエリを何度も実行したくない場合は、次を使用してデータベースをプレーンテキストファイルにダンプすることもできます
mysqldump -u<user> -p<password> --database <dbname> > dbdump.sql
これにより、データベースがプレーンテキストとしてファイルにダンプされますdbdump.sql
。で使い慣れた検索/置換手法 (sed、awk、perl、vi など) を使用できますdbdump.sql
。何をどこで交換するかについては特に注意する必要があります。重要な文字列のみを置換していることを確認する必要があります。それができたら、次のようにダンプを mysql にロードし直すことができます。
mysql -u<user> -p<password> <dbname> < dbdump.sql
一度に 1 つのテーブルをダンプすることもできます -> それを修正します -> それをロードし直します。
本番環境でこれを行う場合、この操作の実行中にデータベースへの書き込みが発生しないように、特別な予防措置が必要です。mysqldump
データベースの一貫したスナップショットをダンプするのに役立つコマンド ラインで他のいくつかのオプションを使用します。