<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
在MySQL 8.0版本之前,預設字元集為latin1
,utf8字元集指向的是utf8mb3 。網站開發人員在資料庫設計的時候往往會將編碼修改為utf8字元集。如果遺忘修改預設的編碼,就會出現亂碼的問題。從MySQL8.0開始,資料庫的預設編碼將改為utf8mb4 ,從而避免上述亂碼的問題。
使用以下命令可以檢視MySQL的預設字元集:
show variables like 'character%'; # 或者 show variables like '%char%';
MySQL:8.0.30 中執行:
引數解釋:
#伺服器級別的預設字元集,建立資料庫沒有顯示的指定字元集就使用該級別的預設字元集 character_set_server=latin1 #資料庫級別的預設字元集,建立表沒有顯示的指定字元集就使用該級別的預設字元集 character_set_database=latin1
因為我的MySQL是docker部署,所以修改方式略微有一些不一樣
先檢視容器ID:
docker ps
根據容器ID進入容器:
docker exec -it e14 /bin/bash
進入 /etc/mysql/mysql.conf.d/
目錄
cd /etc/mysql/mysql.conf.d/
#使用國內映象 cp /etc/apt/sources.list /etc/apt/sources.list.bak echo "" > /etc/apt/sources.list echo "deb http://mirrors.aliyun.com/debian buster main" >> /etc/apt/sources.list ; echo "deb http://mirrors.aliyun.com/debian-security buster/updates main" >> /etc/apt/sources.list ; echo "deb http://mirrors.aliyun.com/debian buster-updates main" >> /etc/apt/sources.list;
更新apt-get指令:
apt-get update
安裝vim:
apt-get install vim
在上面的目錄下編輯mysqld.cnf:
vim mysqld.cnf
插入如下內容:
character_set_server=utf8
但是原庫、原表的設定不會發生變化,引數修改只對新建的資料庫生效。
MySQL5.7版本中,以前建立的庫,建立的表字元集還是latin1
修改已建立資料庫的字元集:
alter database dbtest1 character set 'utf8';
修改已建立資料表的字元集:
alter table t_emp convert to character set 'utf8';
注意:但是原有的資料如果是用非'utf8'編碼的話,資料本身編碼不會發生改變。已有資料需要導 出或刪除,然後重新插入。
MySQL有4個級別的字元集和比較規則,分別是:
執行如下SQL語句:
show variables like 'character%';
character_set_server
:伺服器級別的字元集character_set_database
:當前資料庫的字元集character_set_client
:伺服器解碼請求時使用的字元集character_set_connection
:伺服器處理請求時會把請求字串從character_set_client
轉為character_set_connection
character_set_results
:伺服器向用戶端返回資料時使用的字元集我們介紹的這4個級別字元集和比較規則的聯絡如下:
utf8 字元集表示一個字元需要使用1~4個位元組,但是我們常用的一些字元使用1~3個位元組就可以表示了。而字元集表示一個字元所用的最大位元組長度,在某些方面會影響系統的儲存和效能,所以設計MySQL的設計者偷偷的定義了兩個概念:
MySQL版本一共支援41種字元集,其中的Default collation 列表示這種字元集中一種預設的比較規則,裡面包含著該比較規則主要作用於哪種語言,比如utf8_polish_ci 表示以波蘭語的規則比較, utf8_spanish_ci 是以西班牙語的規則比較, utf8_general_ci 是一種通用的比較規則。字尾表示該比較規則是否區分語言中的重音、大小寫。具體如下:
常用操作:
#檢視GBK字元集的比較規則 SHOW COLLATION LIKE 'gbk%'; #檢視UTF-8字元集的比較規則 SHOW COLLATION LIKE 'utf8%'; #檢視伺服器的字元集和比較規則 SHOW VARIABLES LIKE '%_server'; #檢視資料庫的字元集和比較規則 SHOW VARIABLES LIKE '%_database'; #檢視具體資料庫的字元集 SHOW CREATE DATABASE dbtest1; #修改具體資料庫的字元集 ALTER DATABASE dbtest1 DEFAULT CHARACTER SET 'utf8' COLLATE 'utf8_general_ci'; #檢視表的字元集 show create table employees; #檢視表的比較規則 show table status from atguigudb like 'employees'; #修改表的字元集和比較規則 ALTER TABLE emp1 DEFAULT CHARACTER SET 'utf8' COLLATE 'utf8_general_ci';
系統變數 | 描述 |
---|---|
character_set_client | 伺服器解碼請求時使用的字元集 |
character_set_connection | 伺服器處理請求時會把請求字串從character_set_client 轉為character_set_connection |
character_set_results | 伺服器向用戶端返回資料時使用的字元集 |
這幾個系統變數在我的計算機上的預設值如下(不同作業系統的預設值可能不同,MySQL版本:8.0.30):
字元集在請求處理過程中的變化:
在 SQL 中,關鍵字和函數名是不用區分字母大小寫的,比如 SELECT、WHERE、ORDER、GROUP BY 等關鍵字,以及 ABS、MOD、ROUND、MAX 等函數名。
不過在 SQL 中,你還是要確定大小寫的規範,因為在 Linux 和 Windows 環境下,你可能會遇到不同的大小寫問題。windows系統預設大小寫不敏感,但是linux系統是大小寫敏感的。
通過如下命令檢視:
SHOW VARIABLES LIKE '%lower_case_table_names%';
Windows系統下:
Linux系統下:
lower_case_table_names
引數值的設定:
MySQL在Linux下資料庫名、表名、列名、別名大小寫規則是這樣的:
資料庫名、表名、表的別名、變數名是嚴格區分大小寫的
關鍵字、函數名稱在 SQL 中不區分大小寫
列名(或欄位名)與列的別名(或欄位別名)在所有的情況下均是忽略大小寫的
MySQL在Windows的環境下全部不區分大小寫
Linux下大小寫規則設定:
當想設定為大小寫不敏感時,要在my.cnf 這個組態檔 [mysqld] 中加入lower_case_table_names=1 ,然後重啟伺服器
MySQL
服務時將lower_case_table_names
設定成不同於初始化 MySQL 服務時設定的lower_case_table_names
值如果你的變數名命名規範沒有統一,就可能產生錯誤。
這裡有一個有關命名規範的建議:
資料庫名、表名和欄位名在 Linux MySQL 環境下是區分大小寫的,因此建議你統一這些欄位的命名規則,比如全部採用小寫的方式
雖然關鍵字和函數名稱在 SQL 中不區分大小寫,也就是如果小寫的話同樣可以執行。但是同時將關鍵詞和函數名稱全部大寫,以便於區分資料庫名、表名、欄位名
如果設定的是寬鬆模式,那麼我們在插入資料的時候,即便是給了一個錯誤的資料,也可能會被接受,並且不報錯。
舉例:我在建立一個表時,該表中有一個欄位為name,給name設定的欄位型別時char(10) ,如果我在插入資料的時候,其中name這個欄位對應的有一條資料的長度超過了10 ,例如'1234567890abc',超過了設定的欄位長度10,那麼不會報錯,並且取前10個字元存上,也就是說你這個資料被存為了'1234567890',而'abc'就沒有了。但是,我們給的這條資料是錯誤的,因為超過了欄位長度,但是並沒有報錯,並且mysql自行處理並接受了,這就是寬鬆模式的效果。
應用場景:通過設定sql mode為寬鬆模式,來保證大多數sql符合標準的sql語法,這樣應用在不同資料庫之間進行遷移時,則不需要對業務sql 進行較大的修改。
出現上面寬鬆模式的錯誤,應該報錯才對,所以MySQL5.7版本就將sql_mode預設值改為了嚴格模式。所以在生產等環境中,我們必須採用的是嚴格模式,進而開發、測試環境的資料庫也必須要設定,這樣在開發測試階段就可以發現問題。並且我們即便是用的MySQL5.6,也應該自行將其改為嚴格模式。
開發經驗:MySQL等資料庫總想把關於資料的所有操作都自己包攬下來,包括資料的校驗,其實開發中,我們應該在自己開發的專案程式級別將這些校驗給做了,雖然寫專案的時候麻煩了一些步驟,但是這樣做之後,我們在進行資料庫遷移或者在專案的遷移時,就會方便很多。
筆記源於視訊教學:MySQL資料庫教學天花板,mysql安裝到mysql高階,強!硬!
到此這篇關於MySQL預設字元集設定詳情的文章就介紹到這了,更多相關MySQL預設字元集 內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45