设定值=' '(空字符串),其中字段值为NULL(多列)

时间:2017-05-02 07:01:17

标签: mysql

我有一个包含大量列的表。许多列包含NULL值。但是,当我尝试从中创建CSV文件时,NULL正在被' / N'取代。我想将所有列值设置为空字符串而不是NULL,以便我不必面对' / N'

的问题

5 个答案:

答案 0 :(得分:0)

您可以更新所有列并设置为空字符串而不是NULL,如果您不想继续使用NULL。

如果要在DB中继续NULL,则导出到临时数据库表并应用逻辑...

答案 1 :(得分:0)

您可以使用FIELDS ESCAPED BY子句和SELECT查询并指定空字符串或空格(' ')以获取空值而不是\N,例如:

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

Here's MySQL关于它的文档,这就是它所说的:

  

如果FIELDS ESCAPED BY字符为空,则不会转义任何字符   并且NULL输出为NULL,而不是\ N。

答案 2 :(得分:0)

首先,您需要使用以下查询更新列默认值。

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

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

愿这对你有所帮助。

答案 3 :(得分: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(',');
      }
 }
  }

答案 4 :(得分:0)

您可以像这样更新表格:

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

完成此操作后,您应该更改架构,以便不允许空值,默认值为'',因此您不必再次执行此操作。