99久久国产露脸精品麻豆,欧美日韩精品小说,亚洲免费在线美女视频,国产三级中文字幕,91极品国产情侣高潮对白,国产亚洲一区二区三区不卡片,欧美jizz精品欧美性,久久国产精品久久国产片

mysql的set sql_mode作用

袁志蒙 5768次瀏覽

摘要:之前沒有接觸過mysql的sql_mode的知識,只是遇到過我的cms在我本地和我的服務器上是好好的,然后有的人在用的時候,如果插入的數據過...

之前沒有接觸過mysql的sql_mode的知識,只是遇到過我的cms在我本地和我的服務器上是好好的,然后有的人在用的時候,如果插入的數據過長的話會報錯,我一直不知怎么解決,今天終于知道了。原來都是SQL_MODE設置的原因。


SQL_MODE默認為空,可以在MySQL的配置文件如my.cnf和my.ini中進行修改,也可以在客戶端工具中或者命令來進行修改。


查詢當前SQL_MODE設置:

SELECT @@global.sql_mode;


SQL_MODE的常見模式:


STRICT_TRANS_TABLES :在該模式下,如果一個值不能插入到一個事務表(例如表的存儲引擎為InnoDB)中,則中斷當前的操作不影響非事務表(例如表的存儲引擎為MyISAM)。


ALLOW_INVALID_DATES :該選項并不完全對日期的合法性進行檢查,只檢查月份是否在1~12之間,日期是否在1~31之間。該模式僅對DATE和DATETIME類型有效,而對TIMESTAMP無效,因為TIMESTAMP總是要求一個合法的輸入。


ANSI_QUOTES :啟用ANSI_QUOTES后,不能用雙引號來引用字符串,因為它將被解釋為識別符。


ERROR_FOR_DIVISION_BY_ZERO :在INSERT或UPDATE過程中,如果數據被零除(或MOD(X,0)),則產生錯誤(否則為警告)。如果未給出該模式,那么數據被零除時MySQL返回NULL。如果用到INSERT IGNORE或UPDATE IGNORE中,MySQL生成被零除警告,但操作結果為NULL。


嚴格模式是指將SQL_MODE變量設置為 STRICT_TRANS_TABLES 或 STRICT_ALL_TABLES 中的至少一種。


在SQL_MODE設置為空的情況下,mysql執行的是一種不嚴格的檢查,例如日期字段可以插入'0000-00-00 00:00:00'這樣的值,還有如果要插入的字段長度超過列定義的長度,那么mysql不會終止操作,而是會自動截斷后面的字符繼續插入操作。


既然知道了這些,那就可以加入以下設置:

如果mysql版本大于 5.0的話,在php連接mysql的時候會用如下語句

if ($serverinfo > '5.0') { 
	mysqli_query($this->sql, "SET sql_mode=''");
}


這樣一來,就可以防止用戶誤操作,把定義的字段寫的過多而報錯的情況了。


隨機內容

表情

共1條評論
  • 網友評論:

    g

    2017-01-16 17:59:50 回復

    點擊加載