mysql校對集 mysql教程 字符集和校對集

2021-10-17 13:21:44 字數 2423 閱讀 6078

主要目的:解決大家在開發過程出現的亂碼。

什麼是字符集?

character set可以簡寫為charset。

每種文字有自己的一套編碼方式。

對於字符集的支援細化到四個層次:

伺服器(server)

資料庫(database)

資料表(table)

連線(connection)。

mysql預設字符集

mysql對於字符集的指定可以細化到乙個資料庫,一張表,一列,該用什麼字符集。

但是,傳統的程式在建立資料庫和資料表時並沒有使用那麼複雜的配置,它們用的是預設的配置,那麼,預設的配置從何而來呢?

(1)編譯mysql 時,指定了乙個預設的字符集,這個字符集是 latin1;

(2)安裝mysql 時,可以在配置檔案 (my.ini) 中指定乙個預設的的字符集(character_set_server),如果沒指定,這個值繼承自編譯時指定的;

(3)啟動mysqld 時,可以在命令列引數中指定乙個預設的的字符集,如果沒指定,這個值繼承自配置檔案中的配置,此時 character_set_server 被設定為這個預設的字符集;

(4)當建立乙個新的資料庫時,除非明確指定,這個資料庫的字符集被預設設定為character_set_server;

(5)當選定了乙個資料庫時,character_set_database 被設定為這個資料庫預設的字符集;

(6)在這個資料庫裡建立一張表時,表預設的字符集被設定為 character_set_database,也就是這個資料庫預設的字符集;

(7)當在表內設定一欄時,除非明確指定,否則此欄預設的字符集就是表預設的字符集;

簡單的總結一下,如果什麼地方都不修改,那麼所有的資料庫的所有表的所有欄位的都用 latin1 儲存,不過我們如果安裝 mysql,一般都會選擇多語言支援,也就是說,安裝程式會自動在配置檔案中把 default_character_set 設定為 utf-8,這保證了預設情況下,所有的資料庫的所有表的所有欄位的都用 utf-8 儲存。

系統變數:

– character_set_server:預設的內部操作字符集

– character_set_connection:連線層字符集

– character_set_results:查詢結果字符集

– character_set_database:當前選中資料庫的預設字符集

– character_set_system:系統元資料(欄位名等)字符集

mysql中的字符集轉換過程

我們在設定的時候,對於character_set_client,character_set_connection,character_set_results,盡量保持一致,且為utf8或gbk,建議使用urf8。

如果character_set_client,character_set_connection,character_set_results三者的值都是n,那麼我們可以將其簡化為set names n。

1. mysql server收到請求時將請求資料從character_set_client轉換為character_set_connection;

2. 進行內部操作前將請求資料從character_set_connection轉換為內部操作字符集,其確定方法如下:

? 使用每個資料字段的character set設定值;

? 若上述值不存在,則使用對應資料表的default character set設定值(mysql擴充套件,非sql標準);

? 若上述值不存在,則使用對應資料庫的default character set設定值;

? 若上述值不存在,則使用character_set_server設定值。

3. 將操作結果從內部操作字符集轉換為character_set_results。

#p#mysql 字符集使用注意事項#e#

使用mysql字符集時的建議

? 建立資料庫/表和進行資料庫操作時盡量顯式指出使用的字符集,而不是依賴於mysql的預設設定,否則mysql公升級時可能帶來很大困擾;

? 資料庫和連線字符集都使用latin1時雖然大部分情況下都可以解決亂碼問題,但缺點是無法以字元為單位來進行sql操作,一般情況下將資料庫和連線字符集都置為utf8是較好的選擇;

? 對於mysql php api,一般頁面級的php程式總執行時間較短,在連線到資料庫以後顯式用set names語句設定一次連線字符集即可;但當使用長連線時,請注意保持連線通暢並在斷開重連後用set names語句顯式重置連線字符集。

問題:什麼時候出現亂碼?

1. 客戶端傳送的和資料庫儲存的編碼不一致。

2. 返回編碼的和客戶端的編碼不一致。

其他注意事項

什麼是校對集?(了解即可)

說白了,就是字元排序的方式。

一種字符集有多種校對集。

字符集編碼是utf8,預設的就是 utf8_general_ci,ci表示不區分大小寫。

mysql 檢視校對集 MySQL教程之校對集問題

本篇文章主要給大家介紹mysql中的校對集問題,希望對需要的朋友有所幫助!校對集問題 校對集,其實就是資料的比較方式。校對集,共有三種,分別為 bin binary,二進位制比較,區分大小寫 cs case sensitive,大小寫敏感,區分大小寫 ci case insensitive,大小寫不...

mysql修改校對集 MySQL 教程之校對集問題

本篇文章主要給大家介紹mysql中的校對集問題,希望對需要的朋友有所幫助!校對集問題 校對集,其實就是資料的比較方式。校對集,共有三種,分別為 bin binary,二進位制比較,區分大小寫 cs case sensitive,大小寫敏感,區分大小寫 ci case insensitive,大小寫不...

mysql校對集 MySQL校對集問題

mysql校對集問題 校對集問題 校對集,其實就是資料的比較方式。校對集,共有三種,分別為 bin binary,二進位制比較,區分大小寫 cs case sensitive,大小寫敏感,區分大小寫 ci case insensitive,大小寫不敏感,不區分大小寫。檢視 全部 校對集 基本語法 s...