任何資訊科技在處理資料的時候,如果只是單純的數值和運算,那就不會有太複雜的問題;如果處理的資料是文字的話,就會面臨世界上各種不同語言的問題。
以資料庫來說,它必須正確的儲存各種不同語言的文字,也就是乙個資料庫中,有可能同時儲存繁體和簡體中文、法文等不同語言的文字。
電腦在處理文字資料大多是使用乙個「編碼」來表示某乙個字,對mysql資料庫來說,為了要處理不同語言的文字,它使用一套編碼來處理一種語言的文字,稱為「字符集、character set」。
以英文本母來說,每乙個字母都有乙個編碼,例如a=65、b=66、c=67。
mysql可以依照你的需要為資料庫設定不同的字符集:
collation指的是在乙個字符集中,所有字元的大小排序規則。
以英文本母來說,我們會依照a到z的順序當成大小的順序,小寫的字母也是一樣的。
這樣的大小順序是依照編碼的大小來決定的,mysql把它稱為「binary collation」。
可是在真實的世界中,大小順序卻不是這麼單純,有時候你會把大小寫的英文本母當成是一樣的,例如大寫的a和小寫的a。
在這種情況下,大寫和小寫的字母會被當成是一樣的大小,然後再依照編碼來決定,例如大寫a的編碼比小寫a的編碼小。
mysql把這樣的方式稱為「case-insensitive collation」。
在決定大小順序的時候,如果只有考慮字母大小寫因素的話,那還不算是太複雜的。
如果再考慮各種不同語言特性的話,在決定大小順序的時候就會變得很複雜。
以正體中文來說,它是沒有區分大小寫的,而且乙個中文字會包含乙個以上的位元組,其它的語言也都會有類似的情況。
mysql資料庫把各種不同字符集的編碼資料紀錄在系統資料庫中,你可以使用下列的指令查詢mysql資料庫支援的字符集資訊:
show character set
執行上列的查詢指令後可以得到下列的結果:
mysql除了支援各種不同的字符集,讓資料庫可以儲存不同語言的文字外,每一種字符集都可以依照實際需要,搭配不同的collation設定。
你可以使用下列的指令查詢mysql支援的collation資訊:
show collation
執行上列的查詢指令後可以得到下列的結果:
你也可以使用類似「where」子句中的條件設定,查詢某一種字符集支援的collation資訊:
你可以從collation名稱分辨出排序的準則:
資料庫(database)是用來儲存各種資料元件的容器,在安裝好mysql資料庫伺服器軟體後,就可以依照自己的需求建立資料庫,mysql對於資料庫的數量並沒有限制:
每乙個mysql資料庫伺服器軟體都會使用乙個儲存資料的資料夾,稱為「data directory」。
在這個資料夾下,每建立乙個資料庫,mysql都會建立乙個資料夾,稱為「資料庫資料夾、database directory」,乙個資料庫包含的檔案就會放在各自的資料庫資料夾中:
注:使用「show variables like 'datadir'」敘述,可以查詢mysql資料庫伺服器使用的資料庫資料夾。
因為乙個資料庫會是檔案系統中的乙個資料夾,所以你要特別留意下列的特性:
注:mysql把「database」與「schema」當成是一樣的,所有你在後續使用的指令,都可以把「database」換成「schema」。
更多參考:
mysql 超新手入門教程系列
mysql入門 (一) : 資料庫概論與mysql的安裝
mysql入門 (二) : select 基礎查詢
mysql入門 (三) : 表示式與函式
mysql入門 (四) : join 與union 查詢
mysql入門 (五) : crud 與資料維護
mysql入門 (七) :儲存引擎與資料型態
本文**: mysql入門 (六) : 字符集與資料庫
MySQL(九) 字符集
編碼 字元 二進位制 解碼 二進位制 字元 為什麼會出現亂碼?因為編碼和解碼的規則不同。本質上都是同樣的一串二進位製流,按照不同的規則解讀的結果當然是不同的。模擬一下我們的時間戳轉時間的場景,時間戳就好比是二進位制,時區就好比是不同的字符集,同乙個時間戳用不同的時區轉換,得到的結果當然是不同的。所以...
修改mysql資料庫字符集
首先修改預設建立資料庫字符集 c program files mysql mysql server 5.0資料夾下,找到my.ini檔案 default character set latin1 改為default character set 你想設定的字符集 之後重啟mysql,建立即可 如果想修...
mysql資料庫字符集問題
向mysql資料庫插入漢字的時候,說是data too long 檢視我設定的長度 是varchar 長度100,後來想想可能是字符集的問題,重新設定資料庫的字符集後就ok mysql create database database name character set gbk 或者是utf 8都...