我有一个在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?
我有一个在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?
是否有可能您的表中存储了用户名的空值?那么当你在表格中创建不一致时,你会得到一个错误。
是的,我已经在该列中有一些NULL值。那么如何在这种情况下更改为NOT NULL? – tonga
您必须将该列中的所有NULL值更改为不为NULL的值。否则,您将在定义为NOT NULL的列中有NULL。 –
您应该运行更新查询以将所有NULL值更改为不为NULL的默认值。然后你可以改变你的专栏。 您应该始终牢记一致性是数据库中的关键概念。你的数据库应该并且会强制这个概念,这是一个好兆头。因此,请始终检查更改模式是否与您的数据一致。如果出现不一致,请采取行动。根据具体情况,您需要重新考虑模式更改或转换数据。 – PerfectPixel
该错误表示您将列长度缩短。从未知值到32个字符。第一行在您的username
列中包含超过32个字符。如果您以这种方式更改表格,这会导致数据丢失。
您可以找到username
s的32个字符的记录与此查询
select * from person
where length(username) > 32
只是想知道:已填充表,并在列名某些'NULL'值? –
它目前是VARCHAR(32)而不是像VARCHAR(100)? –
是的,它被填充并在该列中有一些NULL值。 – tonga