MySQL 編碼機制。本站提示廣大學習愛好者:(MySQL 編碼機制)文章只能為提供參考,不一定能成為您想要的結果。以下是MySQL 編碼機制正文
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停止轉碼、分歧編碼的數據庫之間共用數據。