2013-06-23 80 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