深入Mysql字元集設置

来源:http://www.cnblogs.com/androidshouce/archive/2016/06/13/5579374.html
-Advertisement-
Play Games

在mysql客戶端與mysql服務端之間,存在著一個字元集轉換器。 character_set_client =>gbk:轉換器就知道客戶端發送過來的是gbk格式的編碼 character_set_connection=>gbk:將客戶端傳送過來的數據轉換成gbk格式 character_set_r ...


mysql客戶端與mysql服務端之間,存在著一個字元集轉換器。   character_set_client          =>gbk:轉換器就知道客戶端發送過來的是gbk格式的編碼 character_set_connection=>gbk:將客戶端傳送過來的數據轉換成gbk格式 character_set_results        =>gbk:   註:以上三個字元集可以使用set names gbk來統一進行設置 例子: create table test( name varchar(64) NOT NULL )charset utf8;#這裡的utf8表示伺服器端的字元編碼   首先,往數據表test中插入一條數據 inert into test values('測試'); 則,數據“測試”在資料庫中是以“utf8”格式保存的 過程:

  首先,通過mysql客戶端,將數據發送給Mysql伺服器,經過字元集轉換器的時候,由於character_set_connection 值為gbk,所以會將客戶端發送過來的數據轉為gbk格式,緊接著,字元集轉換器將數據要傳送給伺服器的時候,發現伺服器是以utf8保存數據的,所以,在其內部會自動將數據由gbk轉換成utf8格式     什麼時候會出現亂碼?
  1. 客戶端的數據格式與聲明的 character_set_client不符
        通過 header('Content-type:text/html;charset=utf8');將客戶端的數據轉成utf8格式的,在數據經過“字元集轉換器”的時候,由於character_set_client=gbk,而character_set_connection也等於gbk,所以從客戶端傳送過來的數據(其實是utf8格式)並不會被轉換格式。         但是,字元集轉換器在講數據發送給伺服器的時候,發現伺服器要的格式是utf8,所以會將當前數          據當做gbk格式來處理,從而轉成utf8(但是,這一步其實已經錯了。。。)。     2.  result與客戶端頁面不符合的時候         

 將返回結果的格式設置為utf8,但是客戶端接受的格式為gbk,因此會出現亂碼  
通過show character set 語法,可以顯示所有可用的字元集 latin字元集

註意:Maxlen列顯示用於存儲一個字元的最大的位元組數目。   utf8字元集

  gbk字元集

  什麼時候會丟失數據? 對比以上三幅圖可以知道,每種字元集中,用於存儲一個字元的最大的位元組數目都不同,utf8最大,latin最小。所以在經過字元集轉換器的時候,如果處理不當,會造成數據丟失,而且是無法輓回的。 比如: character_set_connection的值改為lantin的時候

從客戶端發送過來的gbk數據,會被轉成lantin1格式,因為gbk格式的數據占用的字元數較多,從而會造成數據丟失  

總結:
  1. character_set_client和character_set_results 一般情況下要一致,因為一個表示客戶端發送的數據格式,另一個表示客戶端接受的數據格式
  2. 為了避免造成數據丟失,需讓 character_set_connection的字元編碼 大於 character_set_client的字元編碼

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 最近發現,很多網友喜歡把tomcat的work目錄里的東西叫做緩存,其實那不是很恰當,work目錄只是tomcat的工作目錄,也就是tomcat把jsp轉換為class文件的工作目錄,這也正是為什麼它叫work目錄而不是cache目錄的原因。 jsp,tomcat的工作原理是當瀏覽器訪問某個jsp頁 ...
  • Python 去劍式 種種變化,用以體演總訣。共有三百六十種變化。 用以破解普天下各門各派的劍法。「破劍式」雖只一式,但其中於天下各門各派劍法要義兼收並蓄;雖說「無招」卻是以普天下劍法之招數為根基,因而其變化之多端不遜於總決式。 摘自金庸 《笑傲江湖》 前兩章介紹了python的基本的語法格式---... ...
  • 指針在編程中有時很重要的作用 我們可以用它完成一些看似不可能完成的任務 #include<iostream>using namespace std;void square(int *n){ *n=*n**n;}int main(){ int num = 2; cout<<"The original ...
  • 對於從Node.js轉Ruby的人很可能會有和我一樣的疑惑,為什麼要有Bundler這個東西?Rubygems不夠嗎? 從Node.js到Ruby的包管理器 在Node的世界里,依賴管理是由npm來完成的。所有依賴信息都寫在package.json裡面之後,一個 就能安裝所有的依賴,然後直接運行程式 ...
  • 1. 位元組轉10進位 直接使用(int)類型轉換。 2. 10進位轉位元組 直接使用(byte)類型轉換。 3. 位元組數組轉16進位字元串 對每一個位元組,先和0xFF做與運算,然後使用Integer.toHexString()函數,如果結果只有1位,需要在前面加0。 4. 16進位字元串轉位元組數組 這 ...
  • /* * ctime.h * * Created on: May 19, 2016 * Author: root */ #ifndef CTIME_H_ #define CTIME_H_ #include "common/micro_type.h" #define OFFSET_SECOND 946 ...
  • * String類是不可變類,只要對String進行修改,都會導致新的對象生成。 * StringBuffer和StringBuilder都是可變類,任何對字元串的改變都不會產生新的對象。 在實際使用時,如果經常需要對一個字元串進行修改,例如插入、刪除等 * 但StringBuffer和String ...
  • 實習階段每天都閑著沒事,今天看了一天的Python。以前聽說過python非常簡潔,就像讀英文一樣簡單,而且我貌似以前在google的招聘信息上看到過python。今天一看,相比起C#,C,java還有vb,python確實非常簡潔。 於是,花半小時把python的簡潔之處總結一下,也算是個學習小結 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...