我有一個在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