簡體   English   中英

MySql:向空值添加非空約束傳遞?

[英]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:

示例圖像: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。)

SqlFiddleDemo

解決它的正確方法是首先在更改模式之前將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;

SqlFiddleDemo2

我建議使用VARCHAR(100)而不是CHAR(100)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM