主頁(yè) > 知識(shí)庫(kù) > mysql charset=utf8你真的弄明白意思了嗎

mysql charset=utf8你真的弄明白意思了嗎

熱門(mén)標(biāo)簽:安徽ai電話電銷機(jī)器人有效果嗎 常州網(wǎng)絡(luò)外呼系統(tǒng)開(kāi)發(fā) 在哪里申請(qǐng)400電話 萊西市地圖標(biāo)注 400電話申請(qǐng)信用卡 走過(guò)哪個(gè)省地圖標(biāo)注 外呼系統(tǒng)電銷受騙 銷售語(yǔ)音電話機(jī)器人 巫師三血與酒地圖標(biāo)注

1、先來(lái)查看一個(gè)建表語(yǔ)句

create table student(
  sid int primary key aotu_increment,
  sname varchar(20) not null,
  age int
)charset=utf8;

思考一個(gè)問(wèn)題:

  • 當(dāng)我們建表時(shí),不指定charset=utf8的時(shí)候,此時(shí)插入中文,為什么會(huì)報(bào)錯(cuò)呢?
  • 當(dāng)指定charset=utf8后,再次插入中文,為什么又可以插入中文,并且不亂碼呢?

2、查看CMD黑窗口的字符集

打開(kāi)CMD黑窗口–>鼠標(biāo)放在窗口最上方–>點(diǎn)擊鼠標(biāo)右鍵–>屬性–>點(diǎn)擊選項(xiàng)


通過(guò)上圖可以知道:CMD中輸入文字使用的字符編碼是GBK。同時(shí)你在保存文件的時(shí)候,經(jīng)常會(huì)看到ANSI字符集,這個(gè)代表的是本地字符集,我們?cè)谥袊?guó),本地字符集使用的就都是GBK編碼。

3、你注意這個(gè)問(wèn)題了嗎?


客戶端client輸入的字符,都是采用GBK編碼的。mysql服務(wù)器存儲(chǔ)的字符又是UTF8編碼的。那么,我們對(duì)數(shù)據(jù)庫(kù)、表進(jìn)行增刪改查,最后返回到客戶端界面中,要想保證字符不亂碼,肯定是經(jīng)過(guò)了"編碼轉(zhuǎn)換過(guò)程的"。我要問(wèn)的是,究竟是什么東西完成了這個(gè)編碼的轉(zhuǎn)換過(guò)程的?

4、你不熟悉的幾個(gè)mysql操作命令

-- 查看數(shù)據(jù)庫(kù)支持的所有的字符集(這句命令自己下去操作)。
mysql> show character set;
-- 查看系統(tǒng)當(dāng)前狀態(tài),里面可以看到部分字符集設(shè)置。
mysql> status;
-- 查看系統(tǒng)字符集設(shè)置,包括所有的字符集設(shè)置
mysql> show variables like '%char%';

操作結(jié)果如下:


通過(guò)上圖我們可以看到有一個(gè)叫做"connection"的東西,中文名叫做"連接器"。"連接器"就是用來(lái)進(jìn)行"編碼轉(zhuǎn)換過(guò)程"的。

1)連接器的特性

① “連接器的作用”:

連接客戶端與服務(wù)端,進(jìn)行字符集的轉(zhuǎn)換。連接器有這種自動(dòng)轉(zhuǎn)換的功能。

② “連接器的工作流程”:
Ⅰ首先,客戶端的字符先發(fā)給連接器,連接器選擇一種編碼將其轉(zhuǎn)換(轉(zhuǎn)換之后的編碼, 與連接器的編碼格式一致),進(jìn)行臨時(shí)存儲(chǔ)。
Ⅱ 接著,連接器再次轉(zhuǎn)換成與服務(wù)器一致的編碼,并最終存儲(chǔ)在服務(wù)器中。
Ⅲ 然后,服務(wù)器返回的結(jié)果,再次先通過(guò)連接器,連接器仍然是選擇一種編碼將其轉(zhuǎn)換(轉(zhuǎn)換之后的編碼, 與連接器的編碼格式一致),進(jìn)行臨時(shí)存儲(chǔ)。
Ⅳ 最后,連接器再將結(jié)果轉(zhuǎn)化為與客戶端一致的字符集,就可以在客戶端正常顯示了。

2)圖示說(shuō)明連接器connection的作用

圖一:

圖一說(shuō)明如下:

圖二:

圖二說(shuō)明如下:

5、對(duì)上述兩個(gè)圖的實(shí)戰(zhàn)演示

1)首先,了解如下幾個(gè)代碼。

-- 1)設(shè)置客戶端的字符集。
set character_set_client=gbk;
-- 2)設(shè)置連接器的字符集。
set character_set_connection=utf8;
-- 3)設(shè)置返回結(jié)果的字符集。
set character_set_results=gbk;

2)代碼演示過(guò)程,詳細(xì)地寫(xiě)在如下鏈接中的sql文件中,可以自行下載,查看。

http://note.youdao.com/noteshare?id=3fe60a490637d1a51ac78bf4a9e7e4d0sub=511D73BDDEA34D9BAC565249035D74A8

6、產(chǎn)生亂碼的兩個(gè)原因

解碼與實(shí)際編碼,不一致導(dǎo)致的亂碼,可修復(fù)。

在傳輸過(guò)程中,由于編碼不一致,導(dǎo)致部分字節(jié)丟失,造成的亂碼,不可修復(fù)。

1)編碼和解碼不一致導(dǎo)致的亂碼

2)傳輸過(guò)程中,丟失字節(jié)導(dǎo)致的亂碼。

7、對(duì)實(shí)際情況的分析(什么都不設(shè)置,系統(tǒng)默認(rèn)是如何呢?)

1)仔細(xì)查看如下圖片


根據(jù)上圖可以知道(好好理解下面的文字說(shuō)明):

圖二:

2)set names gbk的含義

-- 當(dāng)客戶端、連接器、返回值的字符集相同,并且都是gbk的時(shí)候,我們可以采取如下的簡(jiǎn)寫(xiě)方式:
 set names gbk;
 -- 上述sql語(yǔ)句其實(shí)包含了如下三層意思:
 set character_set_client=gbk;
 set character_set_connection=gbk;
 set character_set_results=gbk;

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家

您可能感興趣的文章:
  • MySQL的中文UTF8亂碼問(wèn)題
  • MySql修改數(shù)據(jù)庫(kù)編碼為UTF8避免造成亂碼問(wèn)題
  • MySQL字符集 GBK、GB2312、UTF8區(qū)別 解決MYSQL中文亂碼問(wèn)題
  • PHP MYSQL亂碼問(wèn)題,使用SET NAMES utf8校正
  • 查看修改mysql編碼方式讓它支持中文(gbk或者utf8)
  • mysql存儲(chǔ)emoji表情報(bào)錯(cuò)的處理方法【更改編碼為utf8mb4】
  • 完美轉(zhuǎn)換MySQL的字符集 解決查看utf8源文件中的亂碼問(wèn)題
  • Mysql以u(píng)tf8存儲(chǔ)gbk輸出的實(shí)現(xiàn)方法提供
  • mysql 字符串長(zhǎng)度計(jì)算實(shí)現(xiàn)代碼(gb2312+utf8)
  • MAC下修改mysql默認(rèn)字符集為utf8的方法

標(biāo)簽:陽(yáng)江 赤峰 河北 黃石 鞍山 果洛 煙臺(tái) 來(lái)賓

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《mysql charset=utf8你真的弄明白意思了嗎》,本文關(guān)鍵詞  mysql,charset,utf8,你,真的弄,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《mysql charset=utf8你真的弄明白意思了嗎》相關(guān)的同類信息!
  • 本頁(yè)收集關(guān)于mysql charset=utf8你真的弄明白意思了嗎的相關(guān)信息資訊供網(wǎng)民參考!
  • 企业400电话

    智能AI客服机器人
    15000

    在线订购

    合计11份范本:公司章程+合伙协议+出资协议+合作协议+股权转让协议+增资扩股协议+股权激励+股东会决议+董事会决议

    推薦文章