2012-10-24 135 views
1

我有一个表,我想唯一索引增加。问题是,脚本设置一个插入的数据,就会出现有时,一些空字符串,而不是NULL的方式。有没有办法在MySQL中自动将空字符串转换为NULL值?

那么,除了改变脚本(我预见是必要的,除非有人为我节省了!)......有没有在MySQL中,可以自动使用NULL值,如果一个空字符串通过传递给任何设置独特的钥匙?

+0

该解决方案确实是在更新,你也许可以套用概念:http://stackoverflow.com/questions/3238319/how-do-i-change-all-empty-strings-to-null-in-一个表 –

+0

还能出什么设置表,明智的,或者这是'做正确的第一时间的情况下,你不会有这样的problem'ology –

+0

你为什么不这样做的其他方式,禁止null并将缺省值设置为空字符串? – sn00k4h

回答

5

如果你不能修复导入脚本,那么你应该能够使用触发器的INSERT之前把事情加以补救或更新到桌子。这样的事情应该做的伎俩:

delimiter $$ 
create trigger nullify_blanks_ins before insert on your_table 
for each row begin 
    if new.string = '' then 
     set new.string = null; 
    end if; 
end; 
$$ 
create trigger nullify_blanks_upd before update on your_table 
for each row begin 
    if new.string = '' then 
     set new.string = null; 
    end if; 
end; 
$$ 
delimiter ; 

new这里指的是该行的样子插入或更新完成后,这样你可以看看垃圾值和解决这些问题。然后,因为这些是BEFORE触发器,所以你修补过的行将进入数据库。你会,当然,要改变表(your_table)和列(string)的名字,以满足您的具体情况。

0

尝试像

SET sn=NULLIF(sn,NULL); 

UPDATE Table 
    SET demo = CASE demo = ' ' THEN NULL ELSE demo END, 
    ... 
+0

你会不会有下降的唯一索引,插入数据,做你的更新,那么这个工作重新添加唯一索引? –

+0

@ muistooshort不,如果独特的索引就位,你甚至不会有多个空字符串.... –

相关问题