一、mysql要額外加入一個utf8mb4數據類型,而不是原地升級utf8的原因
MySQL中原來的utf8編碼是一種三字節長的字符串編碼方式,而在Unicode標準中,有一些字符需要使用四字節長的編碼方式來表示,而原來的utf8編碼無法支持這樣的字符。因此,MySQL在5.5版本中增加了一種名為utf8mb4的字符集,用來支持這些四字節長的字符。
utf8mb4實際上是一種可以存儲來自現代Unicode標準中的所有字符的編碼方式,其字節長度為1到4個字節,因此可以支持Unicode編碼的全部字符和表情符號。升級utf8字符集可能會導致現有的編碼數據被解釋為錯誤的字符,這會給現有的應用程序帶來很大的困擾。因此,在MySQL中增加了utf8mb4這種編碼方式來支持四字節長的字符,可以讓舊版的應用程序繼續使用原來的utf8編碼,而新的應用程序可以使用utf8mb4編碼來支持更多的字符。
需要注意的是,在MySQL中使用utf8mb4編碼時,它的存儲方式是與utf8編碼不同的。使用utf8mb4編碼的字符串需要消耗更多的存儲空間,這也需要在應用程序設計時考慮到它可能會占用更多的存儲空間。
二、mysql介紹
1、簡介
MySQL是一個關系型數據庫管理系統,由瑞典MySQL AB?公司開發,屬于?Oracle?旗下產品。MySQL 是最流行的關系型數據庫管理系統之一,在?WEB?應用方面,MySQL是較好的?RDBMS(Relational Database Management System,關系數據庫管理系統)應用軟件之一。MySQL是一種關系型數據庫管理系統,關系數據庫將數據保存在不同的表中,而不是將所有數據放在一個大倉庫內,這樣就增加了速度并提高了靈活性。
MySQL所使用的 SQL 語言是用于訪問數據庫的最常用標準化語言。MySQL 軟件采用了雙授權政策,分為社區版和商業版,由于其體積小、速度快、總體擁有成本低,尤其是開放源碼這一特點,一般中小型和大型網站的開發都選擇 MySQL 作為網站數據庫。
2、應用環境
與其他的大型數據庫例如?Oracle、DB2、SQL Server等相比,MySQL自有它的不足之處,但是這絲毫也沒有減少它受歡迎的程度。對于一般的個人使用者和中小型企業來說,MySQL提供的功能已經綽綽有余,而且由于 MySQL是開放源碼軟件,因此可以大大降低總體擁有成本。
Linux作為操作系統,Apache?或Nginx作為?Web?服務器,MySQL 作為數據庫,PHP/Perl/Python作為服務器端腳本解釋器。由于這四個軟件都是免費或開放源碼軟件(FLOSS),因此使用這種方式不用花一分錢(除開人工成本)就可以建立起一個穩定、免費的網站系統,被業界稱為“LAMP”或“LNMP”組合。
3、系統特性
MySQL使用 C和 C++編寫,并使用了多種編譯器進行測試,保證了源代碼的可移植性支持?AIX、FreeBSD、HP-UX、Linux、Mac OS、NovellNetware、OpenBSD、OS/2 Wrap、Solaris、Windows等多種操作系統為多種編程語言提供了?API。這些編程語言包括 C、C++、Python、Java、Perl、PHP、Eiffel、Ruby、.NET和 Tcl 等支持多線程,充分利用 CPU 資源優化的?SQL查詢算法,有效地提高查詢速度既能夠作為一個單獨的應用程序應用在客戶端服務器網絡環境中,也能夠作為一個庫而嵌入到其他的軟件中提供多語言支持,常見的編碼如中文的?GB 2312、BIG5,日文的?Shift_JIS等都可以用作數據表名和數據列名提供?TCP/IP、ODBC?和?JDBC等多種數據庫連接途徑提供用于管理、檢查、優化數據庫操作的管理工具支持大型的數據庫,可以處理擁有上千萬條記錄的大型數據庫支持多種存儲引擎MySQL 是開源的,所以你不需要支付額外的費用MySQL 使用標準的?SQL數據語言形式MySQL 對 PHP 有很好的支持,PHP是比較流行的 Web 開發語言MySQL是可以定制的,采用了 GPL協議,你可以修改源碼來開發自己的 MySQL 系統在線 DDL/更改功能,數據架構支持動態應用程序和開發人員靈活性(5.6新增)復制全局事務標識,可支持自我修復式集群(5.6新增)復制無崩潰從機,可提高可用性(5.6新增)復制多線程從機,可提高性能(5.6新增)3倍更快的性能(5.7新增)新的優化器(5.7新增)原生JSON支持(5.7新增)多源復制(5.7新增)GIS的空間擴展(5.7新增)4、查詢和索引
只有當數據庫里已經有了足夠多的測試數據時,它的性能測試結果才有實際參考價值。如果在測試數據庫里只有幾百條數據記錄,它們往往在執行完名列前茅條查詢命令之后就被全部加載到內存里,這將使后續的查詢命令都執行得非??歙C不管有沒有使用索引。只有當數據庫里的記錄超過了 1000 條、數據總量也超過了 MySQL 服務器上的內存總量時,數據庫的性能測試結果才有意義。
在不確定應該在哪些數據列上創建索引的時候,人們從 EXPLAIN SELECT 命令那里往往可以獲得一些幫助。這其實只是簡單地給一條普通的 SELECT 命令加一個 EXPLAIN 關鍵字作為前綴而已。有了這個關鍵字,MySQL 將不是去執行那條 SELECT 命令,而是去對它進行分析。MySQL 將以表格的形式把查詢的執行過程和用到的索引等信息列出來。
在 EXPLAIN 命令的輸出結果里,第1列是從數據庫讀取的數據表的名字,它們按被讀取的先后順序排列。type列指定了本數據表與其它數據表之間的關聯關系(JOIN)。在各種類型的關聯關系當中,效率較高的是 system,然后依次是 const、eq_ref、ref、range、index 和 All(All 的意思是:對應于上一級數據表里的每一條記錄,這個數據表里的所有記錄都必須被讀取一遍——這種情況往往可以用一索引來避免)。
possible_keys 數據列給出了 MySQL 在搜索數據記錄時可選用的各個索引。key 數據列是 MySQL 實際選用的索引,這個索引按字節計算的長度在 key_len 數據列里給出。比如說,對于一個 INTEGER 數據列的索引,這個字節長度將是4。如果用到了復合索引,在 key_len 數據列里還可以看到 MySQL 具體使用了它的哪些部分。作為一般規律,key_len 數據列里的值越小越好。
ref 數據列給出了關聯關系中另一個數據表里的數據列的名字。row 數據列是 MySQL 在執行這個查詢時預計會從這個數據表里讀出的數據行的個數。row 數據列里的所有數字的乘積可以大致了解這個查詢需要處理多少組合。
最后,extra 數據列提供了與 JOIN 操作有關的更多信息,比如說,如果 MySQL 在執行這個查詢時必須創建一個臨時數據表,就會在 extra 列看到 usingtemporary 字樣。
延伸閱讀1:mysql的管理工具
可以使用命令行工具管理 MySQL 數據庫(命令 mysql 和 mysqladmin),也可以從 MySQL 的網站下載圖形管理工具 MySQL Administrator, MySQL Query Browser 和 MySQL Workbench。phpMyAdmin是由 php 寫成的 MySQ L資料庫系統管理程程序,讓管理者可用 Web 界面管理 MySQL 資料庫。phpMyBackupPro也是由 PHP 寫成的,可以透過 Web 界面創建和管理數據庫。它可以創建偽 cronjobs,可以用來自動在某個時間或周期備份 MySQL 數據庫。另外,還有其他的 GUI 管理工具,例如 mysql-front 以及 ems mysql manager, navicat等等。