標籤:href 不能 升級 roo ati 用戶端 佔用 語句 長度
一:什麼是字元集
字元集支援多層面:伺服器層(server)、資料庫層(database)、資料表(table)、欄位(column)、串連(connect)、結果集(result)。
1.字元集是一套符號和編碼規則,字串必須有相應的字元集。2.校正集是這套符號和編碼的校正規則,定義字元定序,字串之間比較的規則。3.非ASCII字元在不同字元集中,其所需的位元組數是不一樣的。4.多位元組字元間是以字元進行比較,而非以位元組為單位比較。5.個別校正集是二進位的,基於字元對應的數值進行比較。6.XXX_bin 將字串中的每一個字元用位元據儲存,區分大小寫。7.XXX_general_ci 不區分大小寫,ci為case insensitive的縮寫,即大小寫不敏感。8.XXX_general_cs 區分大小寫, cs為case sensitive的縮寫,即大小寫敏感。 二:常用字元集介紹(1):gbk/gb23121.gb2312是雙位元組字元集,不論中、英字元均使用雙位元組來表示,為了區分中文,將其最高位都設為1.2.gb2312是gbk的子集,gbk是gb18030的子集。3.gbk包括中日韓字元的大字元集合。4.通常使用gbk字元集足夠。5.國際通用性比utf8差,不過utf8佔用的資料庫比gbk大(三位元組字元集)。6.gbk、gb2312等字元集與utf8之間必須通過unicode編碼才能互相轉換。 gbk、gb2312 => Unicode => utf8utf8 => Unicode => gbk、gb2312(2):utf81.8-bit Unicode Tuansformation Format,三位元組字元集。2.是Unicode的一種儲存方式,可變長度字元編碼,又稱萬國碼。3.UTF-8使用可變長度位元組來儲存 Unicode字元,例如ASCII字母繼續使用1個位元組儲存,重音文字、希臘文字或西裡爾字母等使用2個位元組來儲存,而常用的漢字就要使用3個位元組。4.資料庫字元集盡量使用UTF8(用戶端串連connect)及結果(result)字元集也採用UTF8字元集,最終HTML頁面亦是採用UTF8。 http://baike.baidu.com/view/25412.htm ASCII是7位字元集,但不能覆蓋歐洲語言中的特殊字元。lantin1是7位字元集,但不能覆蓋亞洲,非洲語言。 unicode是lantin1的擴充,增加了亞洲、非洲常規語言支援,但仍不支援全部語言,且ASCII用unicode來表示效率不高。utf8是unicode的擴充。MySQL 4.x 版本及以前,CHAR(n)表示能儲存多少位元組數,實際能儲存多少字元數和字元集沒有關係。MySQL 4.x 之後的版本,CHAR(n)表示能儲存多少字元數,實際能儲存多少字元數和字元集有關係。 CHAR(30),UTF-8字元集,最大長度90byte,儲存了30個漢字,位元組數應該是:90個位元組CHAR(30),UTF-8字元集,最大長度90byte,儲存了30個英文,位元組數應該是:30個位元組CHAR(30),GBK字元集,最大長度60byte 儲存了30個漢字,位元組數應該是:60個位元組CHAR(30),GBK字元集,最大長度60byte 儲存了30個英文,位元組數應該是:30個位元組CHAR(30),LATIN1字元集,最大長度30byte儲存了15個漢字,位元組數應該是:30個位元組CHAR(30),LATIN1字元集,最大長度30byte儲存了30個英文,位元組數應該是:30個位元組 三:如何轉換字元集latin1轉換到utf8gbk轉換到utf8lantin1轉換到gbklantin1字元集環境:LANG=en_US.ISO_8859 CRT:defaultgbk字元集環境:LANG=en_US.GBK/zh_CN.GBK CRT:defaultutf8字元集環境:LANG=en_US.UTF-8 CRT:utf8 1.latin1 =>utf8以原來的字元集為latin1為例,升級成為utf8的字元集,原來的表:old_table(default charset=latin1),新表:new_table(defaul charset=utf8)。 第一步:匯出舊資料mysqldump --default-character-set=latin1 -hlocalhost -uroot -B my_db --tables old_table> old.sql 第二步:轉換編碼(unix/linux環境下)iconv -t utf8 -f gb2312 -c old.sql >new.sql或者去掉-f參數,讓iconv自動判斷原來的字元集iconv -t utf-8 -c old.sql >new.sql在這裡,假定原來的資料預設是gb2312編碼。 第三步:匯入修改new.sql,在插入/更新語句開始之前,增加一條SQL語句:SET NAMES utf8; mysqldump -hlocalhost -uroot -B my_db < new.sql 2.gbk => utf8以原來的字元集為gbk為例,升級成為utf8字元集,原來的表old_table(default charset=gbk),新表:new_table(defalut charset=utf8) 第一步:匯出舊資料mysqldump --default-character-set=gbk -hlocalhost -uroot -B my_db --tables old_table> old.sql 第二步:轉換編碼(unix/linux環境下)iconv -t utf-8 -c old.sql >new.sql或者去掉-f參數,讓iconv自動判斷原來的字元集iconv -t utf-8 -c old.sql >new.sql在這裡,假定原來的資料預設是gb2312編碼。 第三步:匯入修改new.sql,在插入/更新語句開始之前,增加一條SQL語句:SET NAMES utf8; mysqldump -hlocalhost -uroot my_db < new.sql 3.latin1 => gbk 以原來的字元集為gbk為例,升級成為utf8字元集,原來的表old_table(default charset=latin1),新表:new_table(defalut charset=utf8) 第一步:匯出舊資料mysqldump --default-character-set=latin1 -hlocalhost -uroot -B my_db --tables old_table> old.sql 第二步:匯入(省去了第二步轉換編碼工作)修改new.sql,在插入/更新語句開始之前,增加一條SQL語句:SET NAMES gbk; mysqldump -hlocalhost -uroot my_db < new.sql
How to support full Unicode in MySQL databases
https://mathiasbynens.be/notes/mysql-utf8mb4
10分鐘學會理解和解決MySQL亂碼問題
http://cenalulu.github.io/mysql/mysql-mojibake/
字元集GBK和UTF8的區別說明
http://blog.csdn.net/zzxian/article/details/7330804
mysql使用utf8mb4經驗吐血總結
https://mp.weixin.qq.com/s?__biz=MzAwMDU2ODU3MA==&mid=2247484084&idx=1&sn=e3740e1087dc73ffcdc4b56bfeaaaa6d&chksm=9ae7bf21ad9036370e8174995ff73775a0ff8c8a51b9995fc8675a994a768a136d187e2aa76d#rd
MySQL字元集小結