在解決乙個jsp亂碼問題時,查到了mysql的字符集,從mysql的參考手冊上找出了一下內容:並做一下總結:
character_set_system: 元資料字符集,(對資料的資料型別的定義),由於unicode是雙位元組編碼,它可以包含幾乎所有的文字的編碼,所以把它做元資料型別,其他的編碼集都可以包含在unicode內,應該是出於空間考慮就選擇了utf8. :character_set_system | utf8
character_set_server :伺服器級別的字符集,對應 my.ini中的[mysqld]default-character-set=xx
character_set_database:資料庫級別的字符集, 對應 create database *** default character set ***
character_set_client : 指定的是客戶端sql語句的編碼,這是使用者告訴mysql查詢是用的什麼字符集,或者說客戶端的查詢語句的字符集。
character_set_connection :指定了mysql用來執行sql語句的時候使用的編碼,, mysql接受到使用者查詢後,按照character_set_client將其轉化為character_set_connection設定的字符集。
character_set_results : mysql將儲存的資料(character_set_system)轉換成character_set_results中設定的字符集傳送給使用者。
程式在拿到 resultset時,resultset的編碼和character_set_results是一致的,在character_set_results的基礎上轉換成和page encode的一致,就可以解決從資料庫讀出來的亂碼問題了。
<@page import="" pageencode="gbk">
<%=new string(rs.getstring(1).getbite(character_set_results),"gbk")%>
這裡有有個問題,能否在程式中直接得到mysql的character_set_results?
附錄:mysql5.1能夠做這些事情:
· 使用多種字符集來儲存字串
· 使用多種校對規則來比較字串
· 在同一臺伺服器、同乙個資料庫或甚至在同乙個表中使用不同字符集或校對規則來混合字串
· 允許定義任何級別的字符集和校對規則
字符集和校對規則有4個級別的預設設定:伺服器級、資料庫級、表級和連線級。
character_set_system : 對資料的資料型別的定義,用於元資料的utf8,
元資料是「關於資料的資料」。描述資料庫的任何資料—作為資料庫內容的對立面—是元資料。因此,列名、資料庫名、使用者名稱、版本名以及從show語句得到的結果中的大部分字串是元資料。還包括information_schema資料庫中的表中的內容,因為定義的那些表儲存關於資料庫物件的資訊。
元資料表述必須滿足這些需求:
· 全部元資料必須在同一字符集內。否則,對inform乙個tion_schema資料庫中的表執行的show命令和select查詢不能正常工作,因為這些運算結果中的同一列的不同行將會使用不同的字符集。
· 元資料必須包括所有語言的所有字元。否則,使用者將不能夠使用它們自己的語言來命名列和表。
為了滿足這兩個需求,mysql使用unicode字符集儲存元資料,即utf8。如果你從不使用重音字元,這不會導致任何破壞。但如果你使用重音字元,應該注意的是元資料是用utf8儲存。
這意味著,user()、current_user()、database()和version()函式的返回值被預設設定為utf8字符集,這與同義函式如session_user()和system_user()的結果相同。
伺服器將character_set_system系統變數設定為元資料字符集的名,所以檢視 character_set_system 始終是utf8
character_set_server 對應 my.ini中的[mysqld]default-character-set=xx
character_set_database 對應 create database *** default character set ***
character_set_client ,這是使用者告訴mysql查詢是用的什麼字符集。
character_set_connection ,mysql接受到使用者查詢後,按照character_set_client將其轉化為character_set_connection設定的字符集。
character_set_results , mysql將儲存的資料(character_set_system)轉換成character_set_results中設定的字符集傳送給使用者。
set names 'x'語句與這三個語句等價:
mysql> set character_set_client = x; mysql> set character_set_results = x; mysql> set character_set_connection = x;
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進行轉碼、不同編碼的資料庫之間共用資料。
mysql 字符集含義 mysql字符集總結
檢視相關字符集的命令 檢視資料庫支援的所有字符集 兩種命令一樣 show character set show char set 檢視字符集對應的collate show collation 檢視系統字符集設定,包括所有的字符集設定 show variables like char mysql sh...
mysql的字符集 總結
1.常見字符集 utf 8 gbk gb2312 2.校對規則 每種字符集均有自己對應的校對規則,每種校對規則只能屬於一種字符集 校對規則名稱 ci case insensitive cs case sensitive bin binary 二元校對規則 3.mysql資料庫中字符集轉換流程 1 m...
mysql 集群字符集 Mysql 字符集
字符集與字元比較 字符集字符集是某種字元的集合,比如最常見的ascii碼,由127個字元組成,只需要乙個位元組就能表示 我們常說的字符集還是gbk iso utf8 mysql 我們使用得最多的字符集就是gbk 和 utf8了 他們都是變長字符集,如果字元在ascii範圍內就使用乙個位元組表示,其他...