根據MySQL,text
列保存65,535字節。多少UTF-8文本適合MySQL的「文本」字段?
因此,如果這是一個合法的邊界,那麼它實際上只適合大約32k UTF-8字符,對吧?或者,這種「模糊」邊界之一是寫文檔的人不能從字節中指出字符,如果設置爲utf8_general_ci
之類的東西,它實際上會允許〜64k UTF-8字符?
根據MySQL,text
列保存65,535字節。多少UTF-8文本適合MySQL的「文本」字段?
因此,如果這是一個合法的邊界,那麼它實際上只適合大約32k UTF-8字符,對吧?或者,這種「模糊」邊界之一是寫文檔的人不能從字節中指出字符,如果設置爲utf8_general_ci
之類的東西,它實際上會允許〜64k UTF-8字符?
A text
列可以達到65,535
字節。
一個utf-8
字符最多可以有3個字節。
所以......你的實際限制可以是21,844
個字符。
詳情參見該手冊:http://dev.mysql.com/doc/refman/5.1/en/string-type-overview.html
的可變長度的字符串。 M代表 最大列長度爲 個字符。 M的範圍是0到 65,535。 VARCHAR的有效最大長度爲 受限於行大小的最大值(65,535字節,即所有列之間共享的 )以及使用的 字符集。例如,utf8 字符每個字符最多可能需要三個 字節,因此使用utf8字符集 的VARCHAR 列可以聲明爲最大值爲21,844個字符。
4字節,而不是3:http://en.wikipedia.org/wiki/Utf-8 – 2010-12-12 02:54:25
一旦所有的河外字符集都添加到Unicode中,utf-8 char可以達到4個字節,並且最終可以是5或更多。^) – 2010-12-12 02:55:46
您從哪裏得到這個「最多3個字節「數字?編碼點的UTF-8編碼可以使用1到4個字節的任何地方。 – Thanatos 2010-12-12 02:57:54
UTF-8字符每個最多可以佔用4個字節,而不是像您所假設的那樣佔用2個字節。 UTF-8 is a variable-width encoding,取決於顯著位的Unicode代碼點的數目:
的original UTF-8 spec允許編碼最多31位的Unicode值,以多達6個字節在UTF-編碼8表格。在UTF-8成爲流行之後,Unicode聯盟宣佈他們將永遠不會使用超出2 的代碼點,並且 - 1。這現在標準化爲RFC 3629。
MySQL currently(即版本5.6)僅支持Unicode Basic Multilingual Plane字符,UTF-8每個字符最多需要3個字節。這意味着您的問題的當前答案是您的TEXT
字段可以保存至少21,844個字符。
取決於你如何看待它,實際限制是高於或低於:
「只能假定該字段最多可以容納16K字符*的UTF-8文本。」 ←我澄清說... – Thanatos 2010-12-12 02:59:07
固定。謝謝,Thanatos。 – 2010-12-12 04:33:58
然而,如主鍵使用時,MySQL假設該列的大小的每個限制增加了3字節到密鑰。
mysql> alter table test2 modify code varchar(333) character set utf8;
Query OK, 0 rows affected (0.05 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> alter table test2 modify code varchar(334) character set utf8;
ERROR 1071 (42000): Specified key was too long; max key length is 1000 bytes
好,使用長字符串列作爲主鍵通常是一張牀,但實際上我已經跨過問題,一個商業(!)產品的數據庫時就來了。
簡短回答你的眼睛:這麼多---> http://pastebin.com/eYUPppw6(21844 3字節UTF-8字符) – Sharky 2014-09-19 10:53:01