### 1.1. Mysql安裝教程
Mysql到現在已經有很多種安裝方式,選擇一種安裝即可,Mysql也朝向“默認大于配置”的方向發展,安裝越來越便利。
安裝前請閱讀一遍教程,安裝過程中請確保每一步進行成功,不要盲目下一步。如果出現問題,很難排查,建議重裝。
#### 1) 安裝
mysql安裝方式有如下幾種:
這里也收集了一些不錯的安裝教程:
1. MSI版本安裝
[MySQL8.0.11 MSI版 安裝圖解說明(opens new window)](https://blog.csdn.net/CSDN_Liang_1991/article/details/81035293)
2. ZIP版本安裝
[mysql-8.0.11-winx64.zip安裝教程詳解(opens new window)](https://blog.csdn.net/zbajie001/article/details/80407944)[官方指南(opens new window)](https://dev.mysql.com/doc/refman/en/windows-start-service.html)
3. brew安裝(mac)
若不考慮版本直接執行命令`brew install mysql`。
**重要:安裝后請詳細查看輸出信息,這里會告訴你怎么啟動mysql,以及一些其他說明!!!**
~~~
# 通常這些輸出信息會告訴你如何啟動mysql。
To have launchd start mysql now and restart at login:
brew services start mysql # 設置為自動啟動
Or, if you don't want/need a background service you can just run:
mysql.server start # 手動啟動一次
~~~
4. scoop安裝(win)
使用[scoop(opens new window)](https://jiayaoo3o.github.io/2019/01/30/Windows%E4%B8%8B%E7%9A%84%E8%BD%AF%E4%BB%B6%E7%AE%A1%E7%90%86%E7%A5%9E%E5%99%A8-scoop/)直接安裝mysql:`scoop install mysql`。
**重要:安裝后請詳細查看輸出信息,這里會告訴你怎么啟動mysql,以及一些包含初始化密碼等其他說明!!!**
啟動命令`net start mysql`,也可在服務界面點擊鼠標啟動。
進入后請修改初始化密碼。
5. docker安裝
~~~
# 拉取 MySQL 鏡像
docker pull mysql:latest
# 運行容器
docker run -itd --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql
# 參數說明:
#-p 3306:3306 :映射容器服務的 3306 端口到宿主機的 3306 端口,外部主機可以直接通過 宿主機ip:3306 訪問到 MySQL 的服務。
#MYSQL_ROOT_PASSWORD=123456:設置 MySQL 服務 root 用戶的密碼。
~~~
##### 配置文件說明:
關于my.ini或著my.etc配置文件,大部分教程都是直接丟給你,我們以下面這個一一說明。 如果你使用mysql8,則如果不需要修改什么,直接不用配置文件即可,“約定大于配置”。 如果你使用mysql5.7,建議修改字符集相關設置。
~~~
[mysqld]
# 設置3306端口
port=3306
# 設置mysql的安裝目錄
basedir=C:/Users/w/scoop/apps/mysql/current
# 設置mysql數據庫的數據的存放目錄
datadir=C:/Users/w/scoop/persist/mysql/data
# 允許最大連接數
max_connections=200
# 允許連接失敗的次數。這是為了防止有人從該主機試圖攻擊數據庫系統
max_connect_errors=10
# 服務端使用的字符集默認為UTF8
character-set-server=utf8
# 創建新表時將使用的默認存儲引擎
default-storage-engine=INNODB
# 默認使用“mysql_native_password”插件認證
default_authentication_plugin=mysql_native_password
[mysql]
# 設置mysql客戶端默認字符集
default-character-set=utf8
[client]
# 設置mysql客戶端連接服務端時默認使用的端口
port=3306
default-character-set=utf8
~~~
上面的配置文件并不是都需要設置!!!
##### 舉例:
我們以mysql zip 5.7版本舉例說明,
這下面是我使用的配置文件以及安裝命令。
~~~
[mysqld]
port = 33066
explicit_defaults_for_timestamp=true
character-set-server=utf8
[client]
default-character-set=utf8
~~~
~~~
# 安裝命令
mysqld --initialize --console
# 安裝服務命令
mysqld --install mysql57
# 啟動服務命令
net start mysql57
# 停止服務命令
net stop mysql57
# 刪除服務命令
sc delete mysql57
~~~
Mysql客戶端
客戶端也有很多種。有收費的,像大名鼎鼎的Navicat、Navicat for MySQL、SQLyog等。也有免費,像HeidiSQL、[MySQL Workbench(opens new window)](https://dev.mysql.com/downloads/workbench/)等。
收費的我也不想出錢,也不想在破解道路上斗智斗勇了。
所以選擇免費的可以了。
直接使用[MySQL Workbench(opens new window)](https://dev.mysql.com/downloads/workbench/),這屬于mysql官方出品,免費,功能強大,缺點英文界面。
#### 2) 注意事項
1. windows下需要VC++依賴,如果你沒有安裝,請下載安裝。 Windows下可能提示缺少VC++201X,需要去[微軟網站(opens new window)](https://visualstudio.microsoft.com/zh-hans/downloads)進行下載,在網頁下面,不要傻乎乎的把VS2019下下來了。
2. 密碼沒有顯示或者沒看到。
在安裝目錄data文件中的.err文件中可以找到初始密碼。對于scoop來說是scoop的persist\\MySQL路徑下。
#### 3) 使用說明
1. 連接的驅動地址為"com.mysql.cj.jdbc.Driver" Mysql和mysql-connector都為8.0以上的版本時, 連接驅動就 不要再用: com.mysql.jdbc.Driver 要引用: com.mysql.cj.jdbc.Driver
2. 建立連接時url的一些參數 jdbc:mysql://localhost:3306/,這個東西后面跟的是數據庫的名字,8.0.X以上的版本還需在數據庫名后面加上這些東西 ?characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai&rewriteBatchedStatements=true
### 1.2. 亂碼之謎
一般由下面原因: 1)客戶機沒有正確地設置client字符集,導致原先的SQL語句被轉換成connection所指字符集,而這種轉換,是會丟失信息的,如果client是utf8格式,那么如果轉換成gb2312格式,這其中必定會丟失信息,反之則不會丟失。一定要保證connection的字符集大于client字符集才能保證轉換不丟失信息。 2)數據庫字體沒有設置正確,如果數據庫字體設置不正確,那么connection字符集轉換成database字符集照樣丟失編碼,原因跟上面一樣。
亂碼主要的原因就是編碼字符集不兼容,默認情況下,我們只需要統一使用UTF8就可以了。
#### [](https://wonderwhyy.gitee.io/wdocs/pages/fccc0e/#_1-%E8%83%8C%E6%99%AF%E7%9F%A5%E8%AF%86)1) 背景知識:
1. 字符集和校驗規則
字符集是一套符合和編碼,校驗規則(collation)是在字符集內用于比較字符的一套規則,即字符集的排序規則。MySQL可以使用對種字符集和檢驗規則來組織字符。
MySQL服務器可以支持多種字符集,在同一臺服務器,同一個數據庫,甚至同一個表的不同字段都可以指定使用不同的字符集。
每種字符集都可能有多種校對規則,并且都有一個默認的校對規則,并且每個校對規則只是針對某個字符集,和其他的字符集么有關系。
在MySQL中,字符集的概念和編碼方案被看做是同義詞,一個字符集是一個轉換表和一個編碼方案的組合。
Unicode(Universal Code)是一種在計算機上使用的字符編碼。Unicode 是為了解決傳統的字符編碼方案的局限而產生的,以滿足跨語言、跨平臺進行文本轉換、處理的要求。
Unicode存在不同的編碼方案,包括Utf-8,Utf-16和Utf-32。Utf表示Unicode Transformation Format。
2. 字符集選擇規則
(1)編譯MySQL 時,指定了一個默認的字符集; (2)安裝MySQL 時,可以在配置文件 (my.cnf) 中指定一個默認的的字符集,如果沒指定,這個值繼承自編譯時指定的; (3)啟動mysqld 時,可以在命令行參數中指定一個默認的的字符集,如果沒指定,這個值繼承自配置文件中的配置,此時character\_set\_server被設定為這個默認的字符集; (4)當創建一個新的數據庫時,除非明確指定,這個數據庫的字符集被缺省設定為character\_set\_server; (5)當選定了一個數據庫時,character\_set\_database被設定為這個數據庫默認的字符集; (6)在這個數據庫里創建一張表時,表默認的字符集被設定為character\_set\_database,也就是這個數據庫默認的字符集; (7)當在表內設置一欄時,除非明確指定,否則此欄缺省的字符集就是表默認的字符集;
3. MySQL數據庫中字符集轉換流程
1、MySQL Server收到請求時將請求數據從character\_set\_client轉換為character\_set\_connection; 2、進行內部操作前將請求數據從character\_set\_connection轉換為內部操作字符集,其確定方法如下: 使用每個數據字段的CHARACTER SET設定值; 若上述值不存在,則使用對應數據表的DEFAULT CHARACTER SET設定值(MySQL擴展,非SQL標準); 若上述值不存在,則使用對應數據庫的DEFAULT CHARACTER SET設定值; 若上述值不存在,則使用character\_set\_server設定值。 3、將操作結果從內部操作字符集轉換為character\_set\_results。

#### [](https://wonderwhyy.gitee.io/wdocs/pages/fccc0e/#_2-%E5%B7%A5%E5%85%B7)2) 工具:
1. 查看當前數據庫的字符集命令:`show variables like '%char%';`這個命令會查看數據庫元數據的編碼信息,如果你看到存在latin1,則需要修改配置。

變量名解釋:
character\_set\_client:客戶端請求數據的字符集
character\_set\_connection:客戶機/服務器連接的字符集
character\_set\_database:默認數據庫的字符集這個變量建議由系統自己管理,不要人為定義。 character\_set\_filesystem:把os上文件名轉化成此字符集,即把 character\_set\_client轉換character\_set\_filesystem, 默認binary是不做任何轉換的
character\_set\_results:結果集,返回給客戶端的字符集
character\_set\_server:數據庫服務器的默認字符集
character\_set\_system:系統字符集,這個值總是utf8,不需要設置。這個字符集用于數據庫對象(如表和列)的名字,也用于存儲在目錄表中的函數的名字。
2. 查看當前數據庫的校對規則命令:`show variables like 'collation%';`

變量名解釋:
collation\_connection 當前連接的字符集。
collation\_database 當前日期的默認校對。每次用USE語句來“跳轉”到另一個數據庫的時候,這個變量的值就會改變。如果沒有當前數據庫,這個變量的值就是collation\_server變量的值。 collation\_server 服務器的默認校對。
排序方式的命名規則為:字符集名字\_語言\_后綴,
其中各個典型后綴的含義如下:
1)\_ci:不區分大小寫的排序方式
2)\_cs:區分大小寫的排序方式
3)\_bin:二進制排序方式,大小比較將根據字符編碼,不涉及人類語言,因此\_bin的排序方式不包含人類語言
#### [](https://wonderwhyy.gitee.io/wdocs/pages/fccc0e/#_3-%E6%9F%A5%E7%9C%8B%E6%95%B0%E6%8D%AE%E5%AD%97%E7%AC%A6%E9%9B%86)3) 查看數據字符集:
1. 確定數據database、table、column字符集是不是正確的:
~~~
SELECT character_set_name, collation_name
FROM information_schema.columns
WHERE table_schema = your_database_name
AND table_name = your_table_name
AND column_name = your_column_name;
~~~
2. 確定數據庫存進去的數據是不是正確的:
~~~
SELECT HEX(column_name)
FROM table_name;
~~~
如果查出來3F,3F是字符'?'的16進制表示,這表明數據庫里儲存的是?。這種情況最常見的原因是在將特定字符從客戶端字符集轉換為目標字符集時出現了問題。
3. 確定往返是可能的。
~~~
SELECT 'ペ' AS `ペ`; /* or SELECT _ucs2 0x30da; */
~~~
1
如果結果也不為ペ,則往返失敗。
4. 確保問題出在瀏覽器或其他應用程序上,而不是MySQL。
使用mysql自帶的命令行客戶端程序完成上述步驟。如果mysql正確顯示字符,但您的應用程序不能正確顯示,則可能是由于系統設置引起的。
使用SHOW VARIABLES LIKE 'char%';查看系統設置:
~~~
mysql> SHOW VARIABLES LIKE 'char%';
+--------------------------+----------------------------------------+
| Variable_name | Value |
+--------------------------+----------------------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | latin1 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | latin1 |
| character_set_system | utf8 |
| character_sets_dir | /usr/local/mysql/share/mysql/charsets/ |
+--------------------------+----------------------------------------+
~~~
character\_set\_client:我們要告訴服務器,我給你發送的數據是什么編碼? character\_set\_connection:告訴字符集轉換器,轉換成什么編碼? character\_set\_results:查詢的結果用什么編碼? 如果以上三者都為字符集N,可簡寫為set names 'N';
1. 臨時設置:SET NAMES 'utf8'
2. 永久設置:
~~~
# 修改數據的配置文件my.cnf
[mysqld]
character-set-server=utf8
[client]
default-character-set=utf8
~~~
* * *
#### 4)亂碼終極解決方案:
1)首先要明確你的客戶端時候何種編碼格式,這是最重要的,這里我們將代碼開發工具統一使用utf8
2)確保你的數據庫使用utf8格式,很簡單,所有編碼通吃。
3)一定要保證connection字符集大于等于client字符集,不然就會信息丟失,比如: latin1 < gb2312 < gbk < utf8,若設置set character\_set\_client = gb2312,那么至少connection的字符集要大于等于gb2312,否則就會丟失信息
4)以上三步做正確的話,那么所有中文都被正確地轉換成utf8格式存儲進了數據庫,為了適應不同的瀏覽器,不同的客戶端,你可以修改character\_set\_results來以不同的編碼顯示中文字體,由于utf8是大方向,因此web應用是我還是傾向于使用utf8格式顯示中文的。
- 數據庫入門
- 1.常用的數據庫
- 2.數據管理技術的3個發展階段
- 3.數據庫是什么?關系型數據庫和非關系型數據庫又是什么?
- 4.為什么要使用數據庫?
- 5.數據庫系統是什么?它由哪幾部分組成?
- 6.常用數據庫訪問接口簡介
- 7.數據庫的種類有哪些?
- 8.幾種常用的數據庫
- 9.MySQL是什么
- 10.MySQL適用于哪些場景?
- 11.學MySQL前,需要了解這些數據庫專業術語
- 12.MySQL客戶端和服務器架構(C/S架構)
- 13.明白了MySQL內部結構才能成為高手!
- 14.如何學習數據庫(新手必看)?
- 15.小白學習MySQL需要多長時間,能從事哪方面的工作?
- 16.當前市場對數據庫程序員的需求如何?待遇如何?
- 17.DBA到底要做什么,成為一名DBA需要具備什么能力?
- 一、數據庫的概念和常用工具
- 二、MySQL規范、配置及登錄退出操作
- 三、MySQL中的數據類型
- 四、數據庫增查改刪等操作
- 五、數據表增查改刪操作
- 六、MySQL數據增查改刪操作
- 七、MySQL存儲引擎
- 八、MySQL常用函數
- MySQL的安裝和配置
- 1.MySQL 5.7的新特性(新功能)
- 2.MySQL下載步驟詳解
- 3.MySQL安裝配置教程(Windows系統)
- 4.MySQL免安裝版配置教程
- 5.MySQL配置環境變量
- 6.安裝MySQL后,如何判斷是否已安裝成功
- 7.啟動MySQL服務的兩種方式(圖解)
- 8.登錄MySQL數據庫
- 9.對Linux MySQL軟件包的一些說明
- 10.Linux CentOS卸載MySQL(Linux安裝MySQL前的準備)
- 11.Linux安裝配置MySQL詳細步驟
- 12.MySQL my.cnf配置文件詳解
- 13.MySQL常用圖形化管理工具
- 14.MySQL安裝后的目錄結構介紹
- 15.MySQL數據庫文件存放目錄結構詳解
- 16.MySQL配置文件(my.ini)詳解
- 17.與其它數據庫不同,MySQL可以在不同的SQL模式下運行
- 18.MySql Command Line Client閃退原因及解決方案
- MySQL數據庫的基本操作
- 1.SQL是什么?它能做什么?
- 2.SQL的基本書寫規則
- 3.MySQL查看或顯示數據庫(SHOW DATABASES語句)
- 4.MySQL創建數據庫(CREATE DATABASE語句)
- 5.MySQL修改數據庫:ALTER DATABASE用法簡介
- 6.MySQL刪除數據庫(DROP DATABASE語句)
- 7.MySQL選擇數據庫(MySQL USE語句)
- 8.MySQL注釋:單行注釋和多行注釋
- 9.MySQL中SQL語句的大小寫規則
- 10.如何查看MySQL系統幫助?
- 11.看懂SQL錯誤代碼,提高學習效率!
- 數據庫高級
- 一、視圖的操作
- 二、觸發器的操作
- 三、事務的操作
- 四、索引的操作
- 五、存儲過程的操作
- 六、數據庫的優化方案
- 1.分庫、分表和索引
- 2.讀寫分離和查詢優化
- 3.join代替子查詢
- 4.盡量使用短小的事務
- 5.常用小技巧
- MySQL使用注意事項
- 1.字符亂碼及連接驅動