2017-05-02 3 views
2

テーブルがたくさんあります。多くの列にNULL値が含まれています。しかし、私はそれからCSVファイルを作成しようとしている間、NULLは '/ N'に置き換えられています。私はすべての列の値をNULLの代わりに空の文字列に設定したいので、 '/ N'で問題に直面する必要はありません。フィールドの値がNULL(複数の列)の値を設定する値 ''(空の文字列)

+0

何が問題なのですか? –

+0

多分スツールをピアノに動かすかもしれない。 – Strawberry

+0

'/ N'は' \ N'のタイプミスですか? – Barmar

答えて

0

すべての列を更新してNULLの代わりに空の文字列に設定できます。 NULLを続行したくない。

あなたがDBにNULLを続行する場合は、一時DBテーブルにエクスポートし、ロジックの上に適用されます...

0

あなたはSELECTクエリと一緒にFIELDS ESCAPED BY句を使用して、空の文字列または空白文字を指定することができます(' ' )空の値の代わりに、\N、例えば取得する:それについて

SELECT * INTO file 
FIELDS ESCAPED BY '' 
LINES TERMINATED BY '\n' 
FROM test_table; 

Here's MySQLのマニュアルを参照して、これはこう言われる、

FIELDS ESCAPED BY文字が空の場合、文字はエスケープされません。 NULLは\ NではなくNULLとして出力されます。

3

まず、次のクエリで列の既定値を更新する必要があります。

ALTER TABLE `table_name` CHANGE `column_name` `column_name` varchar(length) default ''; 

UPDATE `table_name` SET `column_name`='' where `column_name`='/N'; 

これが役立ちます。

+0

''/ N''はリテラル文字列'/N'にマッチし、 'NULL'値にはマッチしません。 – Barmar

0

結果セットのメタデータを使用できます。すべての列を繰り返し、ヌル値をチェックします。

ResultSet rsMain = stmt.executeQuery(selectQuery); 
ResultSetMetaData rsmd = rsMain.getMetaData(); 
while(rsMain.next()){ 
for (int i = 1; i <=rsmd.getColumnCount(); i++) { 
if(rsMain.wasNull()) 
    { 
     sb.append('');// this is the string buffer that writes to the csv 
     sb.append(','); 
     } 
} 
    } 
+0

これはどの言語ですか?質問には「mysql」というタグが付けられています。 – Barmar

+0

私は彼がcsvファイルを作成するためにjavaを使用していると仮定しました。どのようにCSVファイルを作成していますか? @khairul alam – NeN

+0

彼はMySQLの 'SELECT ... INTO OUTFILE'を使ってMySQLから直接CSVファイルを作成しているようです。ヌル値を出力ファイルに入れると、 '\ N'(これは質問で'/N'と間違っています)としてエスケープします。 – Barmar

0

あなたはこのようなテーブルを更新することができます:あなたはこれをやった

UPDATE yourTable 
SET col1 = IFNULL(col1, ''), 
    col2 = IFNULL(col2, ''), 
    col3 = IFNULL(col3, ''), 
    ... 

たらヌルが許可され、デフォルト値が''でないように、あなたはおそらくそう、スキーマを変更する必要がありますあなたはこれをもう一度やり直す必要はありません。

関連する問題