[英]MySql: Adding not null constraint to column with null values passes?
我對一些本地傳遞的mysql代碼進行了JUnit測試,但在服務器上運行時失敗了。 本地我使用的是Windows 7,服務器是Ubuntu 14.04。 兩者都運行MySql 5.6。
我有一個帶有null值的char列,並嘗試在其上放置一個非null約束。 在本地,這應該失敗,但在服務器上我只得到一個警告,但它通過,並將空值設置為空字符串。 (見圖)我假設這是mysql服務器配置的一些區別? 我是MySql的新手,無法找到解決方法。
示例圖像:up是server,down是local:
首先檢查:
SELECT @@sql_mode;
你可能得到:
STRICT_TRANS_TABLES/STRICT_ALL_TABLES
UP env : -------
DOWN env: STRICT_..._TABLES
區別在於錯誤與警告 :
模式 :
嚴格模式控制MySQL如何處理數據更改語句(如INSERT或UPDATE)中的無效或缺失值。 由於多種原因,值可能無效。 例如,列可能具有錯誤的數據類型,或者可能超出范圍。 當要插入的新行不包含其定義中沒有顯式DEFAULT子句的非NULL列的值時,缺少值。 (對於NULL列,如果缺少值,則插入NULL。)
解決它的正確方法是首先在更改模式之前將NULL
更新為空字符串。
CREATE TABLE test_table(primary_key INT AUTO_INCREMENT PRIMARY KEY,
short_char CHAR(100));
INSERT INTO test_table(short_char)
VALUES (NULL);
UPDATE test_table
SET short_char = ''
WHERE short_char IS NULL;
ALTER TABLE test_table modify short_char char(100) not null;
我建議使用VARCHAR(100)
而不是CHAR(100)
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.