欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

MySQL默認(rèn)字符集設(shè)置詳情

 更新時間:2022年09月19日 14:10:16   作者:Pymjl  
這篇文章主要介紹了MySQL默認(rèn)字符集設(shè)置詳情,在MySQL?8.0版本之前,默認(rèn)字符集為latin1?,utf8字符集指向的是utf8mb3,更多相關(guān)內(nèi)容介紹,需要的小伙伴可以參考一下

查看各版本默認(rèn)字符集

在MySQL 8.0版本之前,默認(rèn)字符集為latin1 ,utf8字符集指向的是utf8mb3 。網(wǎng)站開發(fā)人員在數(shù)據(jù)庫設(shè)計的時候往往會將編碼修改為utf8字符集。如果遺忘修改默認(rèn)的編碼,就會出現(xiàn)亂碼的問題。從MySQL8.0開始,數(shù)據(jù)庫的默認(rèn)編碼將改為utf8mb4 ,從而避免上述亂碼的問題。

使用以下命令可以查看MySQL的默認(rèn)字符集:

show variables like 'character%';
# 或者
show variables like '%char%';

MySQL:8.0.30 中執(zhí)行:

  • MySQL:5.7.29 中執(zhí)行

參數(shù)解釋:

#服務(wù)器級別的默認(rèn)字符集,創(chuàng)建數(shù)據(jù)庫沒有顯示的指定字符集就使用該級別的默認(rèn)字符集
character_set_server=latin1
#數(shù)據(jù)庫級別的默認(rèn)字符集,創(chuàng)建表沒有顯示的指定字符集就使用該級別的默認(rèn)字符集
character_set_database=latin1

修改MySQL5中的默認(rèn)字符集

因為我的MySQL是docker部署,所以修改方式略微有一些不一樣

先查看容器ID:

docker ps

根據(jù)容器ID進(jìn)入容器:

docker exec -it e14 /bin/bash

進(jìn)入 /etc/mysql/mysql.conf.d/ 目錄

cd /etc/mysql/mysql.conf.d/
  • 因為docker容器內(nèi)未安裝vim,所以需要先安裝vim
#使用國內(nèi)鏡像
?
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

插入如下內(nèi)容:

character_set_server=utf8
  • 重啟容器
  • 再次進(jìn)入容器查看默認(rèn)編碼

但是原庫、原表的設(shè)定不會發(fā)生變化,參數(shù)修改只對新建的數(shù)據(jù)庫生效。

已有庫&表字符集的變更

MySQL5.7版本中,以前創(chuàng)建的庫,創(chuàng)建的表字符集還是latin1

修改已創(chuàng)建數(shù)據(jù)庫的字符集:

alter database dbtest1 character set 'utf8';

修改已創(chuàng)建數(shù)據(jù)表的字符集:

alter table t_emp convert to character set 'utf8';

注意:但是原有的數(shù)據(jù)如果是用非'utf8'編碼的話,數(shù)據(jù)本身編碼不會發(fā)生改變。已有數(shù)據(jù)需要導(dǎo) 出或刪除,然后重新插入。

各級別的字符集

MySQL有4個級別的字符集和比較規(guī)則,分別是:

  • 服務(wù)器級別
  • 數(shù)據(jù)庫級別
  • 標(biāo)級別
  • 列級別

執(zhí)行如下SQL語句:

show variables like 'character%';

  • character_set_server :服務(wù)器級別的字符集
  • character_set_database :當(dāng)前數(shù)據(jù)庫的字符集
  • character_set_client :服務(wù)器解碼請求時使用的字符集
  • character_set_connection :服務(wù)器處理請求時會把請求字符串從character_set_client 轉(zhuǎn)為character_set_connection
  • character_set_results :服務(wù)器向客戶端返回數(shù)據(jù)時使用的字符集

我們介紹的這4個級別字符集和比較規(guī)則的聯(lián)系如下:

  • 如果創(chuàng)建或修改列時沒有顯式的指定字符集和比較規(guī)則,則該列默認(rèn)用表的字符集和比較規(guī)則
  • 如果創(chuàng)建表時沒有顯式的指定字符集和比較規(guī)則,則該表默認(rèn)用數(shù)據(jù)庫的字符集和比較規(guī)則
  • 如果創(chuàng)建數(shù)據(jù)庫時沒有顯式的指定字符集和比較規(guī)則,則該數(shù)據(jù)庫默認(rèn)用服務(wù)器的字符集和比較規(guī) 則

字符集與比較規(guī)則

utf8 與 utf8mb4

utf8 字符集表示一個字符需要使用1~4個字節(jié),但是我們常用的一些字符使用1~3個字節(jié)就可以表示了。而字符集表示一個字符所用的最大字節(jié)長度,在某些方面會影響系統(tǒng)的存儲和性能,所以設(shè)計MySQL的設(shè)計者偷偷的定義了兩個概念:

  • utf8mb3 :閹割過的utf8 字符集,只使用1~3個字節(jié)表示字符(表情符號等會亂碼)
  • utf8mb4 :正宗的utf8 字符集,使用1~4個字節(jié)表示字符

比較規(guī)則

MySQL版本一共支持41種字符集,其中的Default collation 列表示這種字符集中一種默認(rèn)的比較規(guī)則,里面包含著該比較規(guī)則主要作用于哪種語言,比如utf8_polish_ci 表示以波蘭語的規(guī)則比較, utf8_spanish_ci 是以西班牙語的規(guī)則比較, utf8_general_ci 是一種通用的比較規(guī)則。后綴表示該比較規(guī)則是否區(qū)分語言中的重音、大小寫。具體如下:

常用操作:

#查看GBK字符集的比較規(guī)則
SHOW COLLATION LIKE 'gbk%';
#查看UTF-8字符集的比較規(guī)則
SHOW COLLATION LIKE 'utf8%';

#查看服務(wù)器的字符集和比較規(guī)則
SHOW VARIABLES LIKE '%_server';
#查看數(shù)據(jù)庫的字符集和比較規(guī)則
SHOW VARIABLES LIKE '%_database';

#查看具體數(shù)據(jù)庫的字符集
SHOW CREATE DATABASE dbtest1;
#修改具體數(shù)據(jù)庫的字符集
ALTER DATABASE dbtest1 DEFAULT CHARACTER SET 'utf8' COLLATE 'utf8_general_ci';

#查看表的字符集
show create table employees;
#查看表的比較規(guī)則
show table status from atguigudb like 'employees';
#修改表的字符集和比較規(guī)則
ALTER TABLE emp1 DEFAULT CHARACTER SET 'utf8' COLLATE 'utf8_general_ci';

請求到響應(yīng)過程中字符集的變化

系統(tǒng)變量描述
character_set_client服務(wù)器解碼請求時使用的字符集
character_set_connection服務(wù)器處理請求時會把請求字符串從character_set_client 轉(zhuǎn)為character_set_connection
character_set_results服務(wù)器向客戶端返回數(shù)據(jù)時使用的字符集

這幾個系統(tǒng)變量在我的計算機(jī)上的默認(rèn)值如下(不同操作系統(tǒng)的默認(rèn)值可能不同,MySQL版本:8.0.30):

字符集在請求處理過程中的變化:

SQL大小寫規(guī)范

Windows和Linux平臺區(qū)別

在 SQL 中,關(guān)鍵字和函數(shù)名是不用區(qū)分字母大小寫的,比如 SELECT、WHERE、ORDER、GROUP BY 等關(guān)鍵字,以及 ABS、MOD、ROUND、MAX 等函數(shù)名。

不過在 SQL 中,你還是要確定大小寫的規(guī)范,因為在 Linux 和 Windows 環(huán)境下,你可能會遇到不同的大小寫問題。windows系統(tǒng)默認(rèn)大小寫不敏感,但是linux系統(tǒng)是大小寫敏感的。

通過如下命令查看:

SHOW VARIABLES LIKE '%lower_case_table_names%';

Windows系統(tǒng)下:

Linux系統(tǒng)下:

lower_case_table_names 參數(shù)值的設(shè)置:

  • 默認(rèn)為0,大小寫敏感
  • 設(shè)置1,大小寫不敏感。創(chuàng)建的表,數(shù)據(jù)庫都是以小寫形式存放在磁盤上,對于sql語句都是轉(zhuǎn)換為小寫對表和數(shù)據(jù)庫進(jìn)行查找
  • 設(shè)置2,創(chuàng)建的表和數(shù)據(jù)庫依據(jù)語句上格式存放,凡是查找都是轉(zhuǎn)換為小寫進(jìn)行

MySQL在Linux下數(shù)據(jù)庫名、表名、列名、別名大小寫規(guī)則是這樣的:

數(shù)據(jù)庫名、表名、表的別名、變量名是嚴(yán)格區(qū)分大小寫的

關(guān)鍵字、函數(shù)名稱在 SQL 中不區(qū)分大小寫

列名(或字段名)與列的別名(或字段別名)在所有的情況下均是忽略大小寫的

MySQL在Windows的環(huán)境下全部不區(qū)分大小寫

Linux下大小寫規(guī)則設(shè)置:

當(dāng)想設(shè)置為大小寫不敏感時,要在my.cnf 這個配置文件 [mysqld] 中加入lower_case_table_names=1 ,然后重啟服務(wù)器

  • 但是要在重啟數(shù)據(jù)庫實例之前就需要將原來的數(shù)據(jù)庫和表轉(zhuǎn)換為小寫,否則將找不到數(shù)據(jù)庫名
  • 此參數(shù)適用于MySQL5.7 ,在MySQL8 下禁止在重新啟動 MySQL 服務(wù)時將lower_case_table_names 設(shè)置成不同于初始化 MySQL 服務(wù)時設(shè)置的lower_case_table_names 值

SQL編寫建議

如果你的變量名命名規(guī)范沒有統(tǒng)一,就可能產(chǎn)生錯誤。

這里有一個有關(guān)命名規(guī)范的建議:

  • 關(guān)鍵字和函數(shù)名稱全部大寫
  • 數(shù)據(jù)庫名、表名、表別名、字段名、字段別名等全部小寫
  • SQL 語句必須以分號結(jié)尾

數(shù)據(jù)庫名、表名和字段名在 Linux MySQL 環(huán)境下是區(qū)分大小寫的,因此建議你統(tǒng)一這些字段的命名規(guī)則,比如全部采用小寫的方式

雖然關(guān)鍵字和函數(shù)名稱在 SQL 中不區(qū)分大小寫,也就是如果小寫的話同樣可以執(zhí)行。但是同時將關(guān)鍵詞和函數(shù)名稱全部大寫,以便于區(qū)分?jǐn)?shù)據(jù)庫名、表名、字段名

sql_mode的合理設(shè)置

寬松模式

如果設(shè)置的是寬松模式,那么我們在插入數(shù)據(jù)的時候,即便是給了一個錯誤的數(shù)據(jù),也可能會被接受,并且不報錯。

舉例:我在創(chuàng)建一個表時,該表中有一個字段為name,給name設(shè)置的字段類型時char(10) ,如果我在插入數(shù)據(jù)的時候,其中name這個字段對應(yīng)的有一條數(shù)據(jù)的長度超過了10 ,例如'1234567890abc',超過了設(shè)定的字段長度10,那么不會報錯,并且取前10個字符存上,也就是說你這個數(shù)據(jù)被存為了'1234567890',而'abc'就沒有了。但是,我們給的這條數(shù)據(jù)是錯誤的,因為超過了字段長度,但是并沒有報錯,并且mysql自行處理并接受了,這就是寬松模式的效果。

應(yīng)用場景:通過設(shè)置sql mode為寬松模式,來保證大多數(shù)sql符合標(biāo)準(zhǔn)的sql語法,這樣應(yīng)用在不同數(shù)據(jù)庫之間進(jìn)行遷移時,則不需要對業(yè)務(wù)sql 進(jìn)行較大的修改。

嚴(yán)格模式

出現(xiàn)上面寬松模式的錯誤,應(yīng)該報錯才對,所以MySQL5.7版本就將sql_mode默認(rèn)值改為了嚴(yán)格模式。所以在生產(chǎn)等環(huán)境中,我們必須采用的是嚴(yán)格模式,進(jìn)而開發(fā)、測試環(huán)境的數(shù)據(jù)庫也必須要設(shè)置,這樣在開發(fā)測試階段就可以發(fā)現(xiàn)問題。并且我們即便是用的MySQL5.6,也應(yīng)該自行將其改為嚴(yán)格模式。

開發(fā)經(jīng)驗:MySQL等數(shù)據(jù)庫總想把關(guān)于數(shù)據(jù)的所有操作都自己包攬下來,包括數(shù)據(jù)的校驗,其實開發(fā)中,我們應(yīng)該在自己開發(fā)的項目程序級別將這些校驗給做了,雖然寫項目的時候麻煩了一些步驟,但是這樣做之后,我們在進(jìn)行數(shù)據(jù)庫遷移或者在項目的遷移時,就會方便很多。

筆記源于視頻教程:MySQL數(shù)據(jù)庫教程天花板,mysql安裝到mysql高級,強(qiáng)!硬!

到此這篇關(guān)于MySQL默認(rèn)字符集設(shè)置詳情的文章就介紹到這了,更多相關(guān)MySQL默認(rèn)字符集 內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • mysql數(shù)據(jù)庫如何實現(xiàn)億級數(shù)據(jù)快速清理

    mysql數(shù)據(jù)庫如何實現(xiàn)億級數(shù)據(jù)快速清理

    這篇文章主要介紹了mysql數(shù)據(jù)庫實現(xiàn)億級數(shù)據(jù)快速清理的方法,非常不錯,具有參考借鑒價值,需要的朋友參考下吧
    2018-04-04
  • MySql判斷漢字、日期、數(shù)字的具體函數(shù)

    MySql判斷漢字、日期、數(shù)字的具體函數(shù)

    這篇文章主要大家詳細(xì)介紹了MySql判斷漢字、日期、數(shù)字的具體函數(shù),感興趣的小伙伴們可以參考一下
    2016-05-05
  • 52條SQL語句教你性能優(yōu)化

    52條SQL語句教你性能優(yōu)化

    性能不理想的系統(tǒng)中除了一部分是因為應(yīng)用程序的負(fù)載確實超過了服務(wù)器的實際處理能力外,更多的是因為系統(tǒng)存在大量的SQL語句需要優(yōu)化,本文就介紹了52條優(yōu)化方法,感興趣的可以了解一下
    2021-05-05
  • Mysql中的索引精講

    Mysql中的索引精講

    這篇文章主要給大家介紹了關(guān)于Mysql中索引的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用Mysql具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-05-05
  • MySQL提示:The server quit without updating PID file問題的解決辦法

    MySQL提示:The server quit without updating

    今天網(wǎng)站web頁面提交內(nèi)容到數(shù)據(jù)庫,發(fā)現(xiàn)出錯了,一直提交不了,數(shù)找了下原因,發(fā)現(xiàn)數(shù)據(jù)寫不進(jìn)去!第一反應(yīng),重啟mysql數(shù)據(jù)庫,一直執(zhí)行中,停止不了也啟動不了,直覺告訴我磁盤滿了 !
    2014-04-04
  • mysql添加enum類型的字段實現(xiàn)

    mysql添加enum類型的字段實現(xiàn)

    Enum類型它允許我們在一個有限的選項列表中選擇一個值,本文主要介紹了mysql添加enum類型的字段實現(xiàn),具有一定的參考價值,感興趣的可以了解一下
    2024-01-01
  • Mysql系列SQL查詢語句書寫順序及執(zhí)行順序詳解

    Mysql系列SQL查詢語句書寫順序及執(zhí)行順序詳解

    這篇文章主要為大家介紹了Mysql系列SQL查詢語句的書寫順序及執(zhí)行順序示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步
    2021-10-10
  • Mysql存儲過程中游標(biāo)的用法實例

    Mysql存儲過程中游標(biāo)的用法實例

    這篇文章主要介紹了Mysql存儲過程中游標(biāo)的用法,以商戶關(guān)聯(lián)數(shù)據(jù)的插入及更新為例分析了MySQL存儲過程中游標(biāo)的使用技巧,需要的朋友可以參考下
    2015-07-07
  • MySQL數(shù)據(jù)庫中表的操作詳解

    MySQL數(shù)據(jù)庫中表的操作詳解

    這篇文章主要為大家詳細(xì)介紹了MySQL數(shù)據(jù)庫中表常用的一些操作方法,文中的示例代碼講解詳細(xì),?對我們學(xué)習(xí)MySQL有一定幫助,需要的可以參考一下
    2022-08-08
  • mysql 5.7.23 安裝配置圖文教程

    mysql 5.7.23 安裝配置圖文教程

    這篇文章主要為大家詳細(xì)介紹了mysql 5.7.23 安裝配置方法圖文教程,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-09-09

最新評論