2016-09-22 47 views
1

當字符編碼爲latin1(單字節字符集)時,低於SQL語句執行時沒有錯誤。MySQL中char數據類型的最大長度錯誤

create table chartype (chardata char(255)); 

但是當字符編碼爲UTF-8(每個字符3字節),

create table chartype (chardata char(255)); 

這種說法應該拋出錯誤,但它是在沒有任何錯誤執行。 最大長度char數據類型是255 bytes,對於UTF-8編碼它應該允許僅在下面陳述

create table chartype (chardata char(85)); 

85 * 3 = 255bytes,所以是最大長度爲UTF-8字符集

請澄清我。

+2

文檔只說char長度限制爲255,而不是字節長度。 – Uueerdo

+0

它工作正常,我在w3school上測試過,你也可以試試,[w3Sql](http://www.w3schools.com/sql/trysql.asp?filename=trysql_select_all) –

回答

1

當你說CHAR(255)你正在創建一個固定長度的字段,可容納255個字符。這與字節不同。 UTF-8字符的長度從1到4字節不等,具體取決於您正在談論的字符,但MySQL中的默認字符僅容納3字節長度的字符。

要處理全系列的Unicode字符,您需要使用utf8mb4編碼。

請務必使用VARCHAR而不是CHAR,因爲CHAR是固定長度,會產生大量浪費的空間。

0

http://dev.mysql.com/doc/refman/5.7/en/storage-requirements.html說,在部分:

對於存儲多字節字符VARCHAR列,字符的有效最大數目是少。例如,utf8mb3字符每個字符最多可能需要三個字節,因此使用utf8mb3字符集的VARCHAR列可以聲明爲最多21,844個字符。

這同樣適用於CHAR或TEXT或任何其他支持字符集的數據類型。

相關問題