close

1.varchar(1) 只能存一個字

2.效能 char>nchar>varchar>nvarchar 因var因為額外儲存地址,讀取時會先去抓資料,會比非var來的略慢

3.n是指支援unicode,一字存 2Byte

4.char varchar差在char固定長度varchar會自動延伸

「char varchar」的圖片搜尋結果

char(4 byte   varchar 4個字

4.desc table_name  可以看欄位資料

5.nchar相等char(x) character set utf8=national character(1)

CHAR(10) CHARACTER SET utf8
NATIONAL CHARACTER(10)
NCHAR(10)

 

6.

character set 字符集:選你的語言要挑的 如:big5中文utf8mb

collation排序規則:

mysql_07_snap_02

 

7. 在跨庫多表連接查詢時,若兩資料庫默認字元集不同,系統就會返回這樣的錯誤:

 

create table #t1(
name varchar(20) collate Albanian_CI_AI_WS,  
value int)

create table #t2(
name varchar(20) collate Chinese_PRC_CI_AI_WS,    
value int )

表建好後,執行連接查詢:

select * from #t 1 A inner join #t2 B on A.name=B.name

這樣,錯誤就出現了:

 

  要排除這個錯誤,最簡單方法是,表連接時指定它的排序規則,這樣錯誤就
不再出現了。語句這樣寫:

select *
from #t 1 A inner join #t2 B
on A.name=B.name collate Chinese_PRC_CI_AI_WS

 

來源:http://blog.xuite.net/hsiung03/blog/63620934-SQL+Server+%E4%B8%ADcollate%E7%9A%84%E5%90%AB%E7%BE%A9

8.show collation,show character set

9.

char(n):n Byte

varchar(n):(n + 2) Byte  --2Byte記錄地址

nchar(n):(2 * n) Byte

nvarchar(n):(2 * n + 2) Byte

https://dotblogs.com.tw/henryli/archive/2014/05/27/145277.aspx

10.unsigned的意義

int 可以裝到32767

unsigned會把負數加上去變0~65535

16bit

int(short)

-32768->32767

32

long

-2147483648->2147483647

16

unsigned int

0->65535

 

11.tinyint 1byte  -128~127

tinyint(100)  這個100指length

但要zerofill

ex:alter table table_name modify a_column tinyint(10) zerofill

在mysql query

會補0

「ZEROFILL」一定要跟「UNSIGNED」一起使用,就算你只有為欄位設定「ZEROFILL」,MySQL也會自動加入「UNSIGNED」的設定。

 

mysql_08_snap_21

http://www.codedata.com.tw/database/mysql-tutorial-8-storage-engine-datatype/

12.

mysql

13. 在 UTF-8 的編碼,一個中文 3 bytes
big5 一個中文算 2 byte, 不同的編碼,中文的長度不同

14.length方法和char_length

length傳回byte長度

char_length傳回實際字數

 

mysql_08_snap_25

「LENGTH」函式會傳回字串資料實際的儲存長度(byte);如果你要查詢字串的字元數量的話,就要使用「CHAR_LENGTH」函式:

mysql_08_snap_26

字元集會影響字串的儲存空間,collation會影響字串排列順序。以下列的「cmdev.nonbinarytable3」表格來說:

欄位名稱 型態 字元集 Collation
s VARCHAR(6) latin1 latin1_general_ci
s2 VARCHAR(6) latin1 latin1_general_cs

上列表格中欄位的字元集都指定為「latin1」,不過「s」欄位的collation設定為「latin1_general_ci」,表示排序時不區分大小寫;「s2」欄位設定為「latin1_general_cs」,表示排序時會區分大小寫。以下列儲存在這個表格中紀錄來說:

mysql_08_snap_27

Collation設定中的「latin1_general_ci」,最後的「ci」表示「case insensitive」,是不分大小寫的意思。在這樣的設定下,MySQL會把字串「ABC」和「abc」當成是一樣的;「latin1_general_cs」,最後的「cs」表示「case sensitive」,是區分大小寫的意思。在這樣的設定下,MySQL就會把字串「ABC」和「abc」當成是不一樣的字串。

是否區分大小寫的collation設定會影響排序的結果:

mysql_08_snap_28

另外一個影響是條件的判斷:

mysql_08_snap_29

15.列舉

優點:假如以衣服尺寸設計enum,那麼order by 時不會以abcd,而以xs ,s ,m,l,xl排序

可以用where enumsize=1 或者'xs'

正確性:跟varchar相比,因為varchar可以亂輸入,而enum只能輸入xs ,s那幾個,所以正確性較強

列舉(enumeration)的資料在資料庫中的應用很常見,例如服裝的大小就會以S、M與L來表示小、中與大。你可以使用字串來儲存這類資料,不過這類的資料也很適合使用「ENUM」型態來儲存。以下列的「cmdev.enumtable」表格來說:

mysql_08_snap_31

在儲存資料的時候,「ENUM」型態看起來似乎與「VARCHAR」完全一樣:

mysql_08_snap_32

可是列舉型態在資料的正確性方面,就會比單純的字串型態好多了。例如下列錯誤示範:

mysql_08_snap_33

列舉型態欄位除了可以直接使用字串值來新增與更新資料外,還可以使用數值資料的編號來代替,任何一個列舉型態中的成員,MySQL都會幫它們編一個號碼:

mysql_08_snap_34

瞭解列舉型態中成員的編號以後,你可以選擇字串值或數值來管理列舉型態欄位儲存的資料:

mysql_08_snap_35

雖然在查詢列舉型態欄位資料的時候,所得到的結果都是成員的字串值;不過真正儲存在資料庫中的資料卻是成員的編號,所以指定列舉型態欄位為排序欄位的時候,資料庫會使用編號來排序,而不是以成員的字串值:

mysql_08_snap_36

在指定列舉型態欄位的查詢條件時,可以使用成員的字串值或編號:

mysql_08_snap_37

http://www.codedata.com.tw/database/mysql-tutorial-8-storage-engine-datatype/

16.utf8_general_ci vs utf8_general_cs

ci= case insensitive 不敏感

cs = case sensitive 大小寫敏感

alter table a modify id int(5) charset utf8 collate utf8_general_ci

17.set型態

欄位資料可以存成('mon','tues','wed') 禮拜幾的型式

alter table a modify c set('mon','tues','wed')

 

如要存 工作的星期

mysql_08_snap_39

具有檢查的功能

也可以用數字

mysql_08_snap_42

 

 

arrow
arrow
    全站熱搜

    學習程式 發表在 痞客邦 留言(0) 人氣()