MySql 備忘錄
更新時間:2012年03月23日 23:42:33 作者:
在MySQL中如果不為NOT NULL字段賦值(等同于賦NULL值)也就是說,MySQL中NOT NULL并不是一個約束條件了
一、關(guān)于空值
提示:
在MySQL中如果不為NOT NULL字段賦值(等同于賦NULL值)
例如:
為一個NOT NULL的整型賦NULL值,結(jié)果是0,它并不會出錯,
為一個NOT NULL的CHAR型賦NULL值,結(jié)果是''(空字符串)
DATATIME
-> '0000-00-00 00:00:00 '
MySQL會自動將NULL值轉(zhuǎn)化為該字段的默認值, 那怕是你在表定義時沒有明確地為該字段設(shè)置默認值.
也就是說,MySQL中NOT NULL并不是一個約束條件了.
如果字段設(shè)置為可空,則插入記錄時如果沒有給該字段賦值,那么MySQL自動用Default的值,如果沒有設(shè)置Default,則無論是該字段是什么類型該字段值為NULL.
字段是否可空,雖然不是一個約束條件,卻會改變系統(tǒng)賦默認值的方式。
疑問:以上規(guī)則是否僅限于MyIsam表,InnoDB呢??也是這樣處理的嗎??
連接字符集和校對
character_set_server和collation_server 服務(wù)器字符集和校對規(guī)則
character_set_database和collation_database 默認的數(shù)據(jù)庫字符集和校對規(guī)則
#當查詢離開客戶端后,在查詢中使用哪種字符集?
服務(wù)器使用character_set_client變量作為客戶端發(fā)送的查詢中使用的字符集。
#服務(wù)器接收到查詢后應(yīng)該轉(zhuǎn)換為哪種字符集?
服務(wù)器將客戶端發(fā)送的查詢從character_set_client轉(zhuǎn)換到character_set_connection
#服務(wù)器發(fā)送結(jié)果集或返回錯誤信息到客戶端之前應(yīng)該轉(zhuǎn)換為哪種字符集?
character_set_results變量指示服務(wù)器返回查詢結(jié)果到客戶端使用的字符集。
包括結(jié)果數(shù)據(jù)(列值)和結(jié)果元數(shù)據(jù)(列名)。
有兩個語句影響連接字符集:
SET NAMES 'charset_name'
SET CHARACTER SET charset_name
SET NAMES 'x'語句與這三個語句等價:
mysql> SET character_set_client = x;
mysql> SET character_set_results = x;
mysql> SET character_set_connection = x;
SET CHARACTER SET x語句與這三個語句等價:
mysql> SET character_set_client = x;
mysql> SET character_set_results = x;
mysql> SET collation_connection = @@collation_database; (設(shè)置為默認的數(shù)據(jù)庫連接字符集和校對規(guī)則)
深入Mysql字符集設(shè)置 http://www.dbjr.com.cn/article/29960.htm
用于元數(shù)據(jù)的UTF8
元數(shù)據(jù)是“關(guān)于數(shù)據(jù)的數(shù)據(jù)”。描述數(shù)據(jù)庫的任何數(shù)據(jù)—作為數(shù)據(jù)庫內(nèi)容的對立面—是元數(shù)據(jù)。因此,列名、數(shù)據(jù)庫名、用戶名、版本名以及從SHOW語句得到的結(jié)果中的大部分字符串是元數(shù)據(jù)。還包括INFORMATION_SCHEMA數(shù)據(jù)庫中的表中的內(nèi)容,因為定義的那些表存儲關(guān)于數(shù)據(jù)庫對象的信息。
元數(shù)據(jù)表述必須滿足這些需求:
· 全部元數(shù)據(jù)必須在同一字符集內(nèi)。否則,對INFORM一個TION_SCHEMA數(shù)據(jù)庫中的表執(zhí)行的SHOW命令和SELECT查詢不能正常工作,因為這些運算結(jié)果中的同一列的不同行將會使用不同的字符集。
· 元數(shù)據(jù)必須包括所有語言的所有字符。否則,用戶將不能夠使用它們自己的語言來命名列和表。
為了滿足這兩個需求,MySQL使用Unicode字符集存儲元數(shù)據(jù),即UTF8。
服務(wù)器將character_set_system系統(tǒng)變量設(shè)置為元數(shù)據(jù)字符集的名:
mysql> SHOW VARIABLES LIKE 'character_set_system';
mysql> SHOW VARIABLES LIKE 'character%';查看當前數(shù)據(jù)庫的字符集設(shè)置情況
提示:
在MySQL中如果不為NOT NULL字段賦值(等同于賦NULL值)
例如:
為一個NOT NULL的整型賦NULL值,結(jié)果是0,它并不會出錯,
為一個NOT NULL的CHAR型賦NULL值,結(jié)果是''(空字符串)
DATATIME
-> '0000-00-00 00:00:00 '
MySQL會自動將NULL值轉(zhuǎn)化為該字段的默認值, 那怕是你在表定義時沒有明確地為該字段設(shè)置默認值.
也就是說,MySQL中NOT NULL并不是一個約束條件了.
如果字段設(shè)置為可空,則插入記錄時如果沒有給該字段賦值,那么MySQL自動用Default的值,如果沒有設(shè)置Default,則無論是該字段是什么類型該字段值為NULL.
字段是否可空,雖然不是一個約束條件,卻會改變系統(tǒng)賦默認值的方式。
疑問:以上規(guī)則是否僅限于MyIsam表,InnoDB呢??也是這樣處理的嗎??
連接字符集和校對
character_set_server和collation_server 服務(wù)器字符集和校對規(guī)則
character_set_database和collation_database 默認的數(shù)據(jù)庫字符集和校對規(guī)則
#當查詢離開客戶端后,在查詢中使用哪種字符集?
服務(wù)器使用character_set_client變量作為客戶端發(fā)送的查詢中使用的字符集。
#服務(wù)器接收到查詢后應(yīng)該轉(zhuǎn)換為哪種字符集?
服務(wù)器將客戶端發(fā)送的查詢從character_set_client轉(zhuǎn)換到character_set_connection
#服務(wù)器發(fā)送結(jié)果集或返回錯誤信息到客戶端之前應(yīng)該轉(zhuǎn)換為哪種字符集?
character_set_results變量指示服務(wù)器返回查詢結(jié)果到客戶端使用的字符集。
包括結(jié)果數(shù)據(jù)(列值)和結(jié)果元數(shù)據(jù)(列名)。
有兩個語句影響連接字符集:
SET NAMES 'charset_name'
SET CHARACTER SET charset_name
SET NAMES 'x'語句與這三個語句等價:
mysql> SET character_set_client = x;
mysql> SET character_set_results = x;
mysql> SET character_set_connection = x;
SET CHARACTER SET x語句與這三個語句等價:
mysql> SET character_set_client = x;
mysql> SET character_set_results = x;
mysql> SET collation_connection = @@collation_database; (設(shè)置為默認的數(shù)據(jù)庫連接字符集和校對規(guī)則)
深入Mysql字符集設(shè)置 http://www.dbjr.com.cn/article/29960.htm
用于元數(shù)據(jù)的UTF8
元數(shù)據(jù)是“關(guān)于數(shù)據(jù)的數(shù)據(jù)”。描述數(shù)據(jù)庫的任何數(shù)據(jù)—作為數(shù)據(jù)庫內(nèi)容的對立面—是元數(shù)據(jù)。因此,列名、數(shù)據(jù)庫名、用戶名、版本名以及從SHOW語句得到的結(jié)果中的大部分字符串是元數(shù)據(jù)。還包括INFORMATION_SCHEMA數(shù)據(jù)庫中的表中的內(nèi)容,因為定義的那些表存儲關(guān)于數(shù)據(jù)庫對象的信息。
元數(shù)據(jù)表述必須滿足這些需求:
· 全部元數(shù)據(jù)必須在同一字符集內(nèi)。否則,對INFORM一個TION_SCHEMA數(shù)據(jù)庫中的表執(zhí)行的SHOW命令和SELECT查詢不能正常工作,因為這些運算結(jié)果中的同一列的不同行將會使用不同的字符集。
· 元數(shù)據(jù)必須包括所有語言的所有字符。否則,用戶將不能夠使用它們自己的語言來命名列和表。
為了滿足這兩個需求,MySQL使用Unicode字符集存儲元數(shù)據(jù),即UTF8。
服務(wù)器將character_set_system系統(tǒng)變量設(shè)置為元數(shù)據(jù)字符集的名:
mysql> SHOW VARIABLES LIKE 'character_set_system';
mysql> SHOW VARIABLES LIKE 'character%';查看當前數(shù)據(jù)庫的字符集設(shè)置情況
您可能感興趣的文章:
相關(guān)文章
mysql mysqldump數(shù)據(jù)備份和增量備份
本篇文章主要講如何使用shell實現(xiàn)mysql全量,增量備份,還可以按時間備份。2013-10-10Mysql循環(huán)插入數(shù)據(jù)的實現(xiàn)
這篇文章主要介紹了Mysql循環(huán)插入數(shù)據(jù)的實現(xiàn)過程,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-08-08MySql?InnoDB存儲引擎之Buffer?Pool運行原理講解
緩沖池是用于存儲InnoDB表,索引和其他輔助緩沖區(qū)的緩存數(shù)據(jù)的內(nèi)存區(qū)域。緩沖池的大小對于系統(tǒng)性能很重要。更大的緩沖池可以減少磁盤I/O來多次訪問同一表數(shù)據(jù)。在專用數(shù)據(jù)庫服務(wù)器上,可以將緩沖池大小設(shè)置為計算機物理內(nèi)存大小的百分之802023-01-01mysql觸發(fā)器簡介、創(chuàng)建觸發(fā)器及使用限制分析
這篇文章主要介紹了mysql觸發(fā)器簡介、創(chuàng)建觸發(fā)器及使用限制,結(jié)合實例形式分析了mysql觸發(fā)器的功能、原理、創(chuàng)建、用法及操作注意事項,需要的朋友可以參考下2019-12-12