資料庫編碼規則
mysql 創建 資料庫時指定編碼很重要,很多開發者都使用了默認編碼,但是我使用的經驗來看,制定資料庫的編碼可以很大程度上避免倒入導出帶來的亂碼問題。
我們遵循的標準是,資料庫,表,欄位和頁面或文本的編碼要統一起來
很多mysql資料庫工具(除了phpmyadmin)都不支持創建時指定資料庫編碼,可以改my.ini來解決這個問題,但是需要重新啟動mysql,不過用下面的語句會更有效
GBK: create database test2 DEFAULT CHARACTER SET gbk COLLATE gbk_chinese_ci;
UTF8: CREATE DATABASE `test2` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci
注意:如果不是通過my.ini配置文件設置的內容,只在當前狀態下有效,當重啟資料庫服務後失效。所以如果想要不出現亂碼只有修改my.ini文件,資料庫編碼可以在創建資料庫時候指定UTF8,如下:
|character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | utf8 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | latin1 |
| character_set_system | utf8
⑵ 資料庫中1-1000之間字元編碼是多少
一位數1個,兩位數的話十位有10個1,個位有9個1,三位數百位有100個1,十位有90個1,個位有90個1,再加上1個四位數,一共是1+10+9+100+90+90+1=301個1。
ASCII碼中,一個英文字母(不分大小寫)佔一個位元組的空間,一個中文漢字占兩個位元組的空間。一個二進制數字序列,在計算機中作為一個數字單元,一般為8位二進制數,換算為十進制。最小值0,最大值255。
字元編碼
也稱字集碼,是把字元集中的字元編碼為指定集合中某一對象(例如:比特模式、自然數序列、8位組或者電脈沖),以便文本在計算機中存儲和通過通信網路的傳遞。常見的例子包括將拉丁字母表編碼成摩斯電碼和ASCII。其中,ASCII將字母、數字和其它符號編號,並用7比特的二進制來表示這個整數。通常會額外使用一個擴充的比特,以便於以1個位元組的方式存儲。
⑶ UTF8與GBK資料庫字元集
現有資料庫A與資料庫B,資料庫A服務端由GBK編碼,資料庫B服務端由UTF8編碼,需完成資料庫A至資料庫B的數據導入。測試中發現A庫數據在插入B資料庫時,部分數據查詢時存在編碼轉換報錯。影響字元編碼的幾個要素如下:
首先闡述影響字元編碼的幾個要素:Terminal-encoding、Client-encoding與Database-encoding。Terminal-encoding負責將一個字元串映射成字元編碼,如'鎵'在GBK解析為0xE689,在UTF8解析為0xE98EB5。Client-encoding是資料庫識別編碼格式的參考,資料庫中二進制編碼的原本格式由Client-encoding標識。Database-encoding是資料庫伺服器編碼,對資料庫B來說是UTF8模式,不支持GBK格式。資料庫在處理非UTF8編碼時,會轉義成UTF8編碼入庫;讀出時,如果client_encoding不是UTF8,會轉義成其他二進制編碼。
具體場景如下:
場景a:終端字元集為GBK,資料庫client_encoding為GBK,database_encoding為UTF8。鎵弿被還原出正確原編碼,但因轉義錯誤導致轉義失敗。
場景b:終端字元集為UTF8,資料庫client_encoding為UTF8,database_encoding為UTF8。鎵弿被正確還原並入庫,按照UTF8讀取可以得到原字元,但按照GBK讀取時失敗。
場景c:終端字元集為GBK,資料庫client_encoding為UTF8,database_encoding為UTF8。鎵弿被正確還原並入庫,無論按照UTF8或GBK讀取均可讀出正確字元串。
問題原因在於A庫中的GBK范圍大於B庫中設置的GBK,A庫所謂「GBK」實際上為GB18030編碼集。編碼背景資料如下:
GB2312、GBK與GB18030是中國國家標准簡體中文字元集,GB2312通行於中國大陸,GBK包含GB2312全部漢字、非漢字元號及BIG5全部漢字,GB18030包含所有漢字、部首、符號,且兼容GB2312及GBK,收錄漢字70244個。
解決方法是在導入與導出數據時,如果A庫為「GBK」或類「GBK」字元集傳輸或存儲數據,B庫需設置客戶端字元集為「GB18030」。