MySQL 編碼機制

來源:互聯網
上載者:User

character_set_client ,這是使用者告訴MySQL查詢是用的什麼字元集。
character_set_connection ,MySQL接受到使用者查詢後,按照character_set_client將其轉化為character_set_connection設定的字元集。
character_set_results , MySQL將儲存的資料轉換成character_set_results中設定的字元集發送給使用者。
DISCUZ並沒有使用set NAMES character
SET NAMES 'x'語句與這三個語句等價:
mysql> SET character_set_client = x; mysql> SET character_set_results = x; mysql> SET character_set_connection = x;
而DISCUZ裡面是 複製代碼 代碼如下:@mysql_query("SET character_set_connection=$dbcharset, character_set_results=$dbcharset, character_set_client=binary", $this->link);

SET character_set_client = binary;使用二進位字元集查詢
此三處的字元設定很大程度上會解決亂碼問題,那麼著三個設定具體有什麼作用呢?
character_set_client指定的是Sql語句的編碼,如果設定為 binary,mysql就當二進位來處理,character_set_connection指定了mysql 用來運行sql語句的時候使用的編碼,也就是說,程式發送給MySQL 的SQL語句,會首先被MySQL從character_set_client指定的編碼轉換到character_set_connection指定的編碼,如果character_set_clien指定的是binary,則MySQL就會把SQL語句按照character_set_connection指定的編碼解釋執行.
當執行SQL語句的過程中,比如向資料庫中插入欄位的時候,欄位也有編碼設定,如果欄位的編碼設定和character_set_connection指定的不同,則MySQL 會把插入的資料轉換成欄位設定的編碼。SQL語句中的條件判斷和SQL插入語句的執行過程類似.
當SQL執行完畢像用戶端返回資料的時候,會把資料從欄位指定的編碼轉換為character_set_results指定的編碼,如果character_set_results=NULL 則不做任何轉換動作,(注意這裡設定為NULL不等於沒有設定,沒有設定的時候MySQL會繼承全域設定),
工作中比較有用的就是利用MySQL進行轉碼、不同編碼的資料庫之間共用資料。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.