1.sql_mode
sql_mode可能是比較容易讓開發人員和dba忽略的乙個變數,預設為空。sql_mode的設定其實是比較冒險的一種設定,因為在這種設定下可以允許一些非法操作,比如可以將null插入not null的字段中,也可以插入一些非法日期,如「2012-12-32」。因此在生產環境中強烈建議開發人員將這個值設為嚴格模式,這樣有些問題可以在資料庫的設計和開發階段就能發現,而如果在生產環境下執行資料庫後發現這類問題,那麼修改的代價將變得十分巨大。此外,正確地設定sql_mode還可以做一些約束(constraint)檢查的工作。
對於sql_mode的設定,可以在mysql的配置檔案如my.cnf和my.ini中進行,也可以在客戶端工具中進行,並且可以分別進行全域性的設定或當前會話的設定。
查詢命令:下面的命令可以用來檢視當前sql_mode的設定情況:
mysql>select
@@global.sql_mode;
結果如下:
+---------------------+
| @@global.sql_mode |
+---------------------+
| strict_trans_tables |
+---------------------+
1 row in set (0.07 sec)
設定sql_mode命令:
set session sql_mode='strict_trans_tables
';
各種模式:
嚴格模式是指將sql_mode變數設定為strict_trans_tables或strict_all_tables中的至少一種。現在來看一下sql_mode可以設定的選項。
strict_trans_tables:在該模式下,如果乙個值不能插入到乙個事務表(例如表的儲存引擎為innodb)中,則中斷當前的操作不影響非事務表(例如表的儲存引擎為myisam)。
allow_invalid_dates:該選項並不完全對日期的合法性進行檢查,只檢查月份是否在1~12之間,日期是否在1~31之間。該模式僅對date和datetime型別有效,而對timestamp無效,因為timestamp總是要求乙個合法的輸入。
ansi_quotes:啟用ansi_quotes後,不能用雙引號來引用字串,因為它將被解釋為識別符,示例如下:
mysql>create
table z ( a varchar(10))engine=
innodb;
query ok,
0 rows affected (0.00
sec)
mysql
>
insert
into z select
"aaa";
query ok,
1 rows affected (0.00
sec)
mysql
>
set sql_mode=
'ansi_quotes';
query ok,
0 rows affected (0.00
sec)
mysql
>
insert
into z select
"aaa";
error
1054 (42s22): unknown column
'aaa'in
'field list
'
注意:每次斷開後,就要重新執行上面的sql,才能使sql_mode模式生效。
Hadoop疑難雜症
前天安裝了pig,本來寫了條pig latin,但一直卡在 17 05 07 17 47 07 info mapreduce.job running job job 1494150363568 0001跑不通,想著肯定是mapredcue自身有問題,於是開始了艱苦的檢錯之旅,從csdn到stackf...
Appium疑難雜症
坑之初體驗 1.session大於60秒沒接收到命令自動關閉 python desired caps 在啟動配置裡面加入newcommandtimeout引數 desired caps newcommandtimeout 200 但是注意cnpm預設在當前目錄安裝npm包。3.uiautomatio...
疑難雜症 列舉
1.列舉是使用者自定義的整數型別 2.關於列舉的一般用法,參照 c 中的列舉 3.從字串中獲取列舉值 定義如下的列舉 public enum timeofday 從乙個字串得到列舉值,並轉換為整數 timeofday time timeofday enum.parse typeof timeofda...