2013-06-23 42 views
3

我有一个在MySQL中名为Person的表。有一列叫做username。我想NOT NULL约束添加到使用此列如下:不能添加NOT NULL约束

ALTER TABLE Person MODIFY username VARCHAR(32) NOT NULL; 

但它失败了,报告的错误为:

Error Code: 1265. Data truncated for column 'username' at row 1 

为什么我不能改变这个列是NOT NULL?

+2

只是想知道:已填充表,并在列名某些'NULL'值? –

+2

它目前是VARCHAR(32)而不是像VARCHAR(100)? –

+0

是的,它被填充并在该列中有一些NULL值。 – tonga

回答

9

是否有可能您的表中存储了用户名的空值?那么当你在表格中创建不一致时,你会得到一个错误。

+0

是的,我已经在该列中有一些NULL值。那么如何在这种情况下更改为NOT NULL? – tonga

+3

您必须将该列中的所有NULL值更改为不为NULL的值。否则,您将在定义为NOT NULL的列中有NULL。 –

+1

您应该运行更新查询以将所有NULL值更改为不为NULL的默认值。然后你可以改变你的专栏。 您应该始终牢记一致性是数据库中的关键概念。你的数据库应该并且会强制这个概念,这是一个好兆头。因此,请始终检查更改模式是否与您的数据一致。如果出现不一致,请采取行动。根据具体情况,您需要重新考虑模式更改或转换数据。 – PerfectPixel

1

该错误表示您将列长度缩短。从未知值到32个字符。第一行在您的username列中包含超过32个字符。如果您以这种方式更改表格,这会导致数据丢失。

您可以找到username s的32个字符的记录与此查询

select * from person 
where length(username) > 32 
+0

是的,我已将其更改为VARCHAR(32)。但是我仍然得到了一个不同的错误:'错误代码:1138.无效的NULL值使用'。 – tonga

+0

您的用户名列中是否有空值? –

+0

是的,我在用户名列中有一些空值。当列中有一些NULL值时,如何添加NOT NULL约束?可能吗? – tonga