1. 程式人生 > 其它 >3:資料型別

3:資料型別

技術標籤:Database--MySql資料型別

- 資料型別
1.數值
MySQL能識別的數字包括整數,定點數,浮點數,位域值.
精確值數的精確運算
近似值數的近似運算
帶小數部分的精確值由3個部分組成:一個數字序列,一個小數點,另一個數字序列.
小數點前後的數字序列可有一個為空.
近似值是採用科學計數法表示的浮點數.帶有一個底數和指數.
在整數或浮點數的後面緊跟著字母e或E,接著是一個+或-,然後是一個表示指數的整數.
用精確值計算得到的結果也是精確的,只要沒超出那些數值的精度範圍,就不會丟失精度.
近似值的計算是近似的,且會有舍入誤差.
1.只要表示式有近似值,則被當做近似表示式計算
2.如表示式只包含整數精度值,則它會以BIGINT[64位精度]來進行計算.
3.如表示式只包含精確值,但其中有的值帶有小數部分,則它會以具有65位精度的DECIMAL演算法進行計算.
4.表示式中,如存在字串必須轉換成一個數才能進行計算的情況,則該字串會被轉換成一個雙精度浮點值.

位域值可寫成b'val'或0bval
val有一個或多爾二進位制數字[0或1]構成.如b'1001'和0b1001即為十進位制9
結果集中,BIT值會被顯示為一個二進位制串.
讓它+0或用CAST(),可將其轉換為一個整數.
例:
SELECT b'1001' + 0, CAST(b'1001' AS UNSIGNED);
- 字串值
字串兩端的引號既可以是單引號,也可以是雙引號.
啟用ANSI_QUOTES下,"xxx",xxx被當做一個識別符號對待.
字串轉義序列
\0				NUL
\'				'
\"				"
\b				退格符
\n				換行符
\r				回車符
\t				製表符
\\				反斜線
\Z				Ctrl+Z
字串中嵌入引號,除了轉義字元方法
1.如嵌入的引號與字串的引號相同,通過重複兩次,標識一個符號
2.如嵌入的引號和字串的引號不同,直接嵌入
X'xxxxxx'	每個x是一個16進位制下的值
X'xxxxxx'在字串上下文中,每兩個16進位制數字會被解釋為一個8位數字位元組值.
故X'xxxxxx'結果是一個字串.
X'xxxxxx'在數字上下文中,會將其解釋為一個16進製表示的數值
X為小寫也可.該種寫法下要求xxxxxx中x個數需為偶數個.

0xyyyyy,字首必須為0x不可大寫,與前述類似,預設/字串上下文下被解釋為字串,數值上下文下,被解釋為一個16進製表示的數值.
- 字串型別與字符集支援
字串一般分為兩類,即二進位制串和非二進位制串
1.二進位制串是一組位元組序列
二進位制串沒有特殊的比較或排序屬性.比較基於各位元組的數值逐個位元組實現的.
2.非二進位制串是一個字元序列
每個非二進位制串都與字符集相關.
字符集決定了哪些字元可用,MySQL如何解釋字串內容.
每個字符集都有一種或多種排序規則.
字串所用的排序規則決定了字元在字符集裡的先後順序.
非二進位制串的尾部空格不參與比較..
對laltin1這樣的單位元組字符集,每個字元佔用一個位元組空間.
對多位元組字符集,有的字元需佔多個位元組空間.

給定字符集可有多個排序規則可用.每個排序規則只會對應一個字符集.
二進位制串是逐位元組進行比較的.結果只取決於每個位元組的數值大小.
非二進位制串是按字元進行比較的,每個字元相對值依賴於字符集,排序規則
CHARSET(xxx) COLLATION(xxx)用於確定xxx物件的字符集和排序規則
有兩種記法約定可用於將某個字串常量強制解釋為某種指定的字符集
1._charset str
例
_latin2 'abc'
_utf8 'def'
_utf8 X'646566'
2.N'str'
如
_utf8'def'
可用CONVERT()將任意字串轉換為另一種指字符集形式的字串
CONVERT(str USING charset)
強制某種解釋不改變儲存的內容,只是改變對內容的解釋
CONVERT依據原字符集下每個字元轉換到新字符集下對應字元,產生的結果作為返回值返回
字串長度
1.用CHAR_LENGTH(xxx),返回構成xxx的字元個數
2.用LENGTH(xxx),返回xxx的位元組單位的長度

二進位制串沒有字符集的概念.會被解釋為位元組.
用了二進位制排序規則的非二進位制串,比較基於的是每個字元實際儲存的多個位元組計算出來的值.
對二進位制串執行UPPER/LOWER等沒有效果
SET @s1 = BINARY 'abcd';
SET @s2 = _latin1 'abcd' COLLATE latin1_bin;
UPPER(CONVERT(@s1 USING latin1))
- 字符集相關變數
1.character_set_system表示的是用於儲存識別符號的字符集
2.character_set_server和collation_server表示伺服器的預設字符集和排序規則
3.character_set_database和collation_database表示預設資料庫的字符集和排序規則
4.character_set_client表示客戶端向伺服器傳送SQL語句時用的字符集
5.character_set_results表示伺服器向客戶端返回結果時使用的字符集.結果包括資料值,和諸如列名之類的元資料
6.character_set_connection是伺服器使用的變數
當伺服器接收到來自客戶端的語句字串時,會將該字串從character_set_client轉換為character_set_connection,並使用後者的字符集來處理該語句.
collation_connection適用於語句字串裡的兩個文字串值之間的比較.
7.character_set_filesystem表示的是檔案系統字符集
用於解釋在SQL語句裡代表檔名的字串.
檔案被開啟前,其檔名字串會從character_set_client轉換為character_set_filesystem
對mysql/mysqladmin,將環境變數LANG或LC_ALL設為指定某一語言區域,客戶端會檢測這些變數,相應調整.


- 設定字符集變數時,關聯的排序規則變數自動設為此字符集預設排序規則
- 設定排序規則變數時,關聯的新字符集變數自動設為與排序規則對應的字符集