我正在使用以下陳述句創建一個表:
CREATE TABLE interfaces (
type VARCHAR(128),
name VARCHAR(1024),
description VARCHAR(4096),
ikey VARCHAR(1024),
filename VARCHAR(4096),
syntax VARCHAR(4096),
hostname VARCHAR(256));
我得到錯誤:
ERROR 1005 (HY000): Can't create table 'interfaces' (use SHOW WARNINGS for more info).
當我輸入時,我會SHOW WARNINGS;看到:
--------- ------ --------------------------------------------------------------------
| Level | Code | Message |
--------- ------ --------------------------------------------------------------------
| Warning | 1296 | Got error 738 'Record too big' from NDB |
| Error | 1005 | Can't create table 'interfaces' (use SHOW WARNINGS for more info). |
--------- ------ --------------------------------------------------------------------
2 rows in set (0.00 sec)
從我在這里閱讀的 MySQL v8.0 白皮書中可以看出:
行大小。在 NDB 8.0 中,任何一行的最大允許大小為 30000 位元組(從以前版本中的 14000 位元組增加)。
我不只是簡單地將每列括號中的位元組數相加來查看我的行大小嗎?( 128 1024 4096 1024 4096 4096 256 = 14720)我是否缺少開銷?如果是這樣,是否真的有額外的 15280 開銷?
uj5u.com熱心網友回復:
問題在于:utf8mb4Unicode 字符每個字符使用四個位元組。如果您的列使用單位元組字符集(latin1或ascii),您的假設將是正確的。
uj5u.com熱心網友回復:
你的默認字符集是什么?在 MySQL 8.0 中默認為 utf8mb4,這意味著您計算每個字符 4 個位元組。
因此,您的行大小為 14,720 個字符 * 4 個位元組/字符 = 58,880 個位元組。
utf8 是一種可變長度編碼,因此可能不是每個字符都是 4 位元組字符,但 MySQL 必須假設這些字串中的任何或所有字符都可能是 4 位元組字符。因此,在計算行大小時,它必須容納每個字符的最大可能位元組數。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/439657.html
標籤:mysql
上一篇:為什么即使我已經按列分組,我仍然收到相同的列值?[SQLite]
下一篇:我的帶有子查詢的查詢不會回傳空集
