MySQL 編碼機制
更新時間:2008年12月06日 11:07:04 作者:
一般在MYSQL使用中文查詢
都是用 set NAMES character
character_set_client ,這是用戶告訴MySQL查詢是用的什么字符集。
character_set_connection ,MySQL接受到用戶查詢后,按照character_set_client將其轉(zhuǎn)化為character_set_connection設(shè)定的字符集。
character_set_results , MySQL將存儲的數(shù)據(jù)轉(zhuǎn)換成character_set_results中設(shè)定的字符集發(fā)送給用戶。
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;使用二進制字符集查詢
此三處的字符設(shè)定很大程度上會解決亂碼問題,那么著三個設(shè)定具體有什么作用呢?
character_set_client指定的是Sql語句的編碼,如果設(shè)置為 binary,mysql就當二進制來處理,character_set_connection指定了mysql 用來運行sql語句的時候使用的編碼,也就是說,程序發(fā)送給MySQL 的SQL語句,會首先被MySQL從character_set_client指定的編碼轉(zhuǎn)換到character_set_connection指定的編碼,如果character_set_clien指定的是binary,則MySQL就會把SQL語句按照character_set_connection指定的編碼解釋執(zhí)行.
當執(zhí)行SQL語句的過程中,比如向數(shù)據(jù)庫中插入字段的時候,字段也有編碼設(shè)置,如果字段的編碼設(shè)置和character_set_connection指定的不同,則MySQL 會把插入的數(shù)據(jù)轉(zhuǎn)換成字段設(shè)定的編碼。SQL語句中的條件判斷和SQL插入語句的執(zhí)行過程類似.
當SQL執(zhí)行完畢像客戶端返回數(shù)據(jù)的時候,會把數(shù)據(jù)從字段指定的編碼轉(zhuǎn)換為character_set_results指定的編碼,如果character_set_results=NULL 則不做任何轉(zhuǎn)換動作,(注意這里設(shè)置為NULL不等于沒有設(shè)置,沒有設(shè)置的時候MySQL會繼承全局設(shè)置),
工作中比較有用的就是利用MySQL進行轉(zhuǎn)碼、不同編碼的數(shù)據(jù)庫之間共用數(shù)據(jù)。
character_set_connection ,MySQL接受到用戶查詢后,按照character_set_client將其轉(zhuǎn)化為character_set_connection設(shè)定的字符集。
character_set_results , MySQL將存儲的數(shù)據(jù)轉(zhuǎn)換成character_set_results中設(shè)定的字符集發(fā)送給用戶。
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里面是
復(fù)制代碼 代碼如下:
@mysql_query("SET character_set_connection=$dbcharset, character_set_results=$dbcharset, character_set_client=binary", $this->link);
SET character_set_client = binary;使用二進制字符集查詢
此三處的字符設(shè)定很大程度上會解決亂碼問題,那么著三個設(shè)定具體有什么作用呢?
character_set_client指定的是Sql語句的編碼,如果設(shè)置為 binary,mysql就當二進制來處理,character_set_connection指定了mysql 用來運行sql語句的時候使用的編碼,也就是說,程序發(fā)送給MySQL 的SQL語句,會首先被MySQL從character_set_client指定的編碼轉(zhuǎn)換到character_set_connection指定的編碼,如果character_set_clien指定的是binary,則MySQL就會把SQL語句按照character_set_connection指定的編碼解釋執(zhí)行.
當執(zhí)行SQL語句的過程中,比如向數(shù)據(jù)庫中插入字段的時候,字段也有編碼設(shè)置,如果字段的編碼設(shè)置和character_set_connection指定的不同,則MySQL 會把插入的數(shù)據(jù)轉(zhuǎn)換成字段設(shè)定的編碼。SQL語句中的條件判斷和SQL插入語句的執(zhí)行過程類似.
當SQL執(zhí)行完畢像客戶端返回數(shù)據(jù)的時候,會把數(shù)據(jù)從字段指定的編碼轉(zhuǎn)換為character_set_results指定的編碼,如果character_set_results=NULL 則不做任何轉(zhuǎn)換動作,(注意這里設(shè)置為NULL不等于沒有設(shè)置,沒有設(shè)置的時候MySQL會繼承全局設(shè)置),
工作中比較有用的就是利用MySQL進行轉(zhuǎn)碼、不同編碼的數(shù)據(jù)庫之間共用數(shù)據(jù)。
相關(guān)文章
MYSQL如何 查詢數(shù)據(jù)庫中所有表中的數(shù)據(jù)量
INFORMATION_SCHEMA.TABLES 是 MySQL 中的系統(tǒng)表,用于存儲關(guān)于數(shù)據(jù)庫中的表的信息,這篇文章主要介紹了MYSQL如何 查詢數(shù)據(jù)庫中所有表中的數(shù)據(jù)量,需要的朋友可以參考下2024-01-01
如何解決局域網(wǎng)內(nèi)mysql數(shù)據(jù)庫連接慢
通過內(nèi)網(wǎng)連另外一臺機器的mysql服務(wù), 確發(fā)現(xiàn)速度N慢! 等了大約幾十秒才等到提示輸入密碼。非常急人,有沒有辦法可以解決局域網(wǎng)內(nèi)mysql數(shù)據(jù)庫連接慢呢?下面小編帶領(lǐng)大家來解決此問題,感興趣的朋友一起看看吧2015-09-09
MySQL 使用DQL命令查詢數(shù)據(jù)的實現(xiàn)方法
這篇文章主要介紹了MySQL 使用DQL命令查詢數(shù)據(jù)的實現(xiàn)方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2019-08-08

