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

