MySql 備忘錄
更新時(shí)間:2012年03月23日 23:42:33 作者:
在MySQL中如果不為NOT NULL字段賦值(等同于賦NULL值)也就是說,MySQL中NOT NULL并不是一個(gè)約束條件了
一、關(guān)于空值
提示:
在MySQL中如果不為NOT NULL字段賦值(等同于賦NULL值)
例如:
為一個(gè)NOT NULL的整型賦NULL值,結(jié)果是0,它并不會(huì)出錯(cuò),
為一個(gè)NOT NULL的CHAR型賦NULL值,結(jié)果是''(空字符串)
DATATIME
-> '0000-00-00 00:00:00 '
MySQL會(huì)自動(dòng)將NULL值轉(zhuǎn)化為該字段的默認(rèn)值, 那怕是你在表定義時(shí)沒有明確地為該字段設(shè)置默認(rèn)值.
也就是說,MySQL中NOT NULL并不是一個(gè)約束條件了.
如果字段設(shè)置為可空,則插入記錄時(shí)如果沒有給該字段賦值,那么MySQL自動(dòng)用Default的值,如果沒有設(shè)置Default,則無論是該字段是什么類型該字段值為NULL.
字段是否可空,雖然不是一個(gè)約束條件,卻會(huì)改變系統(tǒng)賦默認(rèn)值的方式。
疑問:以上規(guī)則是否僅限于MyIsam表,InnoDB呢??也是這樣處理的嗎??
連接字符集和校對(duì)
character_set_server和collation_server 服務(wù)器字符集和校對(duì)規(guī)則
character_set_database和collation_database 默認(rèn)的數(shù)據(jù)庫字符集和校對(duì)規(guī)則
#當(dāng)查詢離開客戶端后,在查詢中使用哪種字符集?
服務(wù)器使用character_set_client變量作為客戶端發(fā)送的查詢中使用的字符集。
#服務(wù)器接收到查詢后應(yīng)該轉(zhuǎn)換為哪種字符集?
服務(wù)器將客戶端發(fā)送的查詢從character_set_client轉(zhuǎn)換到character_set_connection
#服務(wù)器發(fā)送結(jié)果集或返回錯(cuò)誤信息到客戶端之前應(yīng)該轉(zhuǎn)換為哪種字符集?
character_set_results變量指示服務(wù)器返回查詢結(jié)果到客戶端使用的字符集。
包括結(jié)果數(shù)據(jù)(列值)和結(jié)果元數(shù)據(jù)(列名)。
有兩個(gè)語句影響連接字符集:
SET NAMES 'charset_name'
SET CHARACTER SET charset_name
SET NAMES 'x'語句與這三個(gè)語句等價(jià):
mysql> SET character_set_client = x;
mysql> SET character_set_results = x;
mysql> SET character_set_connection = x;
SET CHARACTER SET x語句與這三個(gè)語句等價(jià):
mysql> SET character_set_client = x;
mysql> SET character_set_results = x;
mysql> SET collation_connection = @@collation_database; (設(shè)置為默認(rèn)的數(shù)據(jù)庫連接字符集和校對(duì)規(guī)則)
深入Mysql字符集設(shè)置 http://m.fzitv.net/article/29960.htm
用于元數(shù)據(jù)的UTF8
元數(shù)據(jù)是“關(guān)于數(shù)據(jù)的數(shù)據(jù)”。描述數(shù)據(jù)庫的任何數(shù)據(jù)—作為數(shù)據(jù)庫內(nèi)容的對(duì)立面—是元數(shù)據(jù)。因此,列名、數(shù)據(jù)庫名、用戶名、版本名以及從SHOW語句得到的結(jié)果中的大部分字符串是元數(shù)據(jù)。還包括INFORMATION_SCHEMA數(shù)據(jù)庫中的表中的內(nèi)容,因?yàn)槎x的那些表存儲(chǔ)關(guān)于數(shù)據(jù)庫對(duì)象的信息。
元數(shù)據(jù)表述必須滿足這些需求:
· 全部元數(shù)據(jù)必須在同一字符集內(nèi)。否則,對(duì)INFORM一個(gè)TION_SCHEMA數(shù)據(jù)庫中的表執(zhí)行的SHOW命令和SELECT查詢不能正常工作,因?yàn)檫@些運(yùn)算結(jié)果中的同一列的不同行將會(huì)使用不同的字符集。
· 元數(shù)據(jù)必須包括所有語言的所有字符。否則,用戶將不能夠使用它們自己的語言來命名列和表。
為了滿足這兩個(gè)需求,MySQL使用Unicode字符集存儲(chǔ)元數(shù)據(jù),即UTF8。
服務(wù)器將character_set_system系統(tǒng)變量設(shè)置為元數(shù)據(jù)字符集的名:
mysql> SHOW VARIABLES LIKE 'character_set_system';
mysql> SHOW VARIABLES LIKE 'character%';查看當(dāng)前數(shù)據(jù)庫的字符集設(shè)置情況
提示:
在MySQL中如果不為NOT NULL字段賦值(等同于賦NULL值)
例如:
為一個(gè)NOT NULL的整型賦NULL值,結(jié)果是0,它并不會(huì)出錯(cuò),
為一個(gè)NOT NULL的CHAR型賦NULL值,結(jié)果是''(空字符串)
DATATIME
-> '0000-00-00 00:00:00 '
MySQL會(huì)自動(dòng)將NULL值轉(zhuǎn)化為該字段的默認(rèn)值, 那怕是你在表定義時(shí)沒有明確地為該字段設(shè)置默認(rèn)值.
也就是說,MySQL中NOT NULL并不是一個(gè)約束條件了.
如果字段設(shè)置為可空,則插入記錄時(shí)如果沒有給該字段賦值,那么MySQL自動(dòng)用Default的值,如果沒有設(shè)置Default,則無論是該字段是什么類型該字段值為NULL.
字段是否可空,雖然不是一個(gè)約束條件,卻會(huì)改變系統(tǒng)賦默認(rèn)值的方式。
疑問:以上規(guī)則是否僅限于MyIsam表,InnoDB呢??也是這樣處理的嗎??
連接字符集和校對(duì)
character_set_server和collation_server 服務(wù)器字符集和校對(duì)規(guī)則
character_set_database和collation_database 默認(rèn)的數(shù)據(jù)庫字符集和校對(duì)規(guī)則
#當(dāng)查詢離開客戶端后,在查詢中使用哪種字符集?
服務(wù)器使用character_set_client變量作為客戶端發(fā)送的查詢中使用的字符集。
#服務(wù)器接收到查詢后應(yīng)該轉(zhuǎn)換為哪種字符集?
服務(wù)器將客戶端發(fā)送的查詢從character_set_client轉(zhuǎn)換到character_set_connection
#服務(wù)器發(fā)送結(jié)果集或返回錯(cuò)誤信息到客戶端之前應(yīng)該轉(zhuǎn)換為哪種字符集?
character_set_results變量指示服務(wù)器返回查詢結(jié)果到客戶端使用的字符集。
包括結(jié)果數(shù)據(jù)(列值)和結(jié)果元數(shù)據(jù)(列名)。
有兩個(gè)語句影響連接字符集:
SET NAMES 'charset_name'
SET CHARACTER SET charset_name
SET NAMES 'x'語句與這三個(gè)語句等價(jià):
mysql> SET character_set_client = x;
mysql> SET character_set_results = x;
mysql> SET character_set_connection = x;
SET CHARACTER SET x語句與這三個(gè)語句等價(jià):
mysql> SET character_set_client = x;
mysql> SET character_set_results = x;
mysql> SET collation_connection = @@collation_database; (設(shè)置為默認(rèn)的數(shù)據(jù)庫連接字符集和校對(duì)規(guī)則)
深入Mysql字符集設(shè)置 http://m.fzitv.net/article/29960.htm
用于元數(shù)據(jù)的UTF8
元數(shù)據(jù)是“關(guān)于數(shù)據(jù)的數(shù)據(jù)”。描述數(shù)據(jù)庫的任何數(shù)據(jù)—作為數(shù)據(jù)庫內(nèi)容的對(duì)立面—是元數(shù)據(jù)。因此,列名、數(shù)據(jù)庫名、用戶名、版本名以及從SHOW語句得到的結(jié)果中的大部分字符串是元數(shù)據(jù)。還包括INFORMATION_SCHEMA數(shù)據(jù)庫中的表中的內(nèi)容,因?yàn)槎x的那些表存儲(chǔ)關(guān)于數(shù)據(jù)庫對(duì)象的信息。
元數(shù)據(jù)表述必須滿足這些需求:
· 全部元數(shù)據(jù)必須在同一字符集內(nèi)。否則,對(duì)INFORM一個(gè)TION_SCHEMA數(shù)據(jù)庫中的表執(zhí)行的SHOW命令和SELECT查詢不能正常工作,因?yàn)檫@些運(yùn)算結(jié)果中的同一列的不同行將會(huì)使用不同的字符集。
· 元數(shù)據(jù)必須包括所有語言的所有字符。否則,用戶將不能夠使用它們自己的語言來命名列和表。
為了滿足這兩個(gè)需求,MySQL使用Unicode字符集存儲(chǔ)元數(shù)據(jù),即UTF8。
服務(wù)器將character_set_system系統(tǒng)變量設(shè)置為元數(shù)據(jù)字符集的名:
mysql> SHOW VARIABLES LIKE 'character_set_system';
mysql> SHOW VARIABLES LIKE 'character%';查看當(dāng)前數(shù)據(jù)庫的字符集設(shè)置情況
您可能感興趣的文章:
相關(guān)文章
解決Mysql的left join無效及使用的注意事項(xiàng)說明
這篇文章主要介紹了解決Mysql的left join無效及使用的注意事項(xiàng)說明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-07-07
全面解析MySQL?Explain如何優(yōu)化SQL查詢性能
在?MySQL?中,EXPLAIN?關(guān)鍵字可以幫助我們分析查詢執(zhí)行計(jì)劃,從而優(yōu)化查詢性能,所以本文就來和大家詳細(xì)講講Explain是如何優(yōu)化SQL查詢性能的2023-05-05
Mysql事務(wù)并發(fā)臟讀+不可重復(fù)讀+幻讀詳解
這篇文章主要介紹了Mysql事務(wù)并發(fā)臟讀+不可重復(fù)讀+幻讀詳解,文章基于Mysql事務(wù)的相關(guān)資料展開對(duì)主題的詳細(xì)介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下2022-04-04
教你使用VS?Code的MySQL擴(kuò)展管理數(shù)據(jù)庫的方法
這篇文章主要介紹了使用VS?Code的MySQL擴(kuò)展管理數(shù)據(jù)庫,在本文告訴你如何用VS?Code的擴(kuò)展程序管理MySQL數(shù)據(jù)庫,包括連接到MySQL、新建數(shù)據(jù)庫和表、修改字段定義、簡單的查詢方法以及導(dǎo)入導(dǎo)出,需要的朋友可以參考下2022-01-01
MySQL DATE_SUB()函數(shù)的實(shí)現(xiàn)示例
本文主要介紹了MySQL DATE_SUB() 函數(shù)的實(shí)現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2025-03-03

