原因比較複雜,嘗試解釋一下1、首先要了解byte的概念,位元組是計算機的儲存單位,1byte=8bit,標識的有符號數在-127至127之間2、計算機剛發明的時候,沒有漢字編碼,只有英文字元、數字加一些特殊的控制符,這些透過一個byte就可以表示。所以當時發明的asc碼最多127個,‘zhihu’這樣的英文就必須採用5個位元組儲存。3、後來加入了其他國家的文字,那麼127個字元根本不夠用,中文常用字都4千多呢。所以透過雙位元組編碼的方案來儲存一個字元,這就是UNICODE(UCS2),最多可以表示65536個字元,這樣儲存”飛書Joe“這樣的5個字元的詞,就必須採用10個byte的位元組儲存空間,98-de-4e-66-00-4a-00-6f-00-65。 ps:UCS4標準已經出來了,最多采用4個位元組儲存一個字元,不過目前採用的最多還是UCS24、但是各個國家還有自己的標準,比如中國有自己的GBK編碼,GBK編碼為了保持和英文的相容,其中英文的編碼還是1byte,GBK自己的編碼第一位元組的範圍是81–FE(也就是不含80和FF),第二位元組的一部分領域在40–7E,其他領域在80–FE。打比方“飛書Joe”採用GBK編碼,就會變成b7-c9-ca-e9-4a-6f-65,一共7個byte。5、某些資料庫(比如Oracle)中儲存字元的欄位,是採用byte計算的---。所以要儲存“飛書Joe”這樣的使用者名稱,就必須至少7個byte, varchar2(7),如果只把按照字元來算,設計為varchar2(5)的話,那麼儲存就會失敗。所以這就解釋了,為什麼京東、淘寶註冊使用者名稱,一個漢字必須算兩個字元。 他們是為了能夠使用者名稱能夠順利、完整的儲存到資料庫中。
原因比較複雜,嘗試解釋一下1、首先要了解byte的概念,位元組是計算機的儲存單位,1byte=8bit,標識的有符號數在-127至127之間2、計算機剛發明的時候,沒有漢字編碼,只有英文字元、數字加一些特殊的控制符,這些透過一個byte就可以表示。所以當時發明的asc碼最多127個,‘zhihu’這樣的英文就必須採用5個位元組儲存。3、後來加入了其他國家的文字,那麼127個字元根本不夠用,中文常用字都4千多呢。所以透過雙位元組編碼的方案來儲存一個字元,這就是UNICODE(UCS2),最多可以表示65536個字元,這樣儲存”飛書Joe“這樣的5個字元的詞,就必須採用10個byte的位元組儲存空間,98-de-4e-66-00-4a-00-6f-00-65。 ps:UCS4標準已經出來了,最多采用4個位元組儲存一個字元,不過目前採用的最多還是UCS24、但是各個國家還有自己的標準,比如中國有自己的GBK編碼,GBK編碼為了保持和英文的相容,其中英文的編碼還是1byte,GBK自己的編碼第一位元組的範圍是81–FE(也就是不含80和FF),第二位元組的一部分領域在40–7E,其他領域在80–FE。打比方“飛書Joe”採用GBK編碼,就會變成b7-c9-ca-e9-4a-6f-65,一共7個byte。5、某些資料庫(比如Oracle)中儲存字元的欄位,是採用byte計算的---。所以要儲存“飛書Joe”這樣的使用者名稱,就必須至少7個byte, varchar2(7),如果只把按照字元來算,設計為varchar2(5)的話,那麼儲存就會失敗。所以這就解釋了,為什麼京東、淘寶註冊使用者名稱,一個漢字必須算兩個字元。 他們是為了能夠使用者名稱能夠順利、完整的儲存到資料庫中。