2011-06-10 22 views
1

在MySQL對該格式的表:MySQL的行長度的兩倍以上我所期望

CREATE TABLE IF NOT EXISTS `test` (
    `field1` char(32) NOT NULL, 
    `field2` smallint(5) unsigned NOT NULL, 
    `field3` smallint(5) unsigned NOT NULL, 
    `field4` datetime NOT NULL, 
    `field5` enum('opt1','opt2','opt3','opt4','opt5') NOT NULL, 
    `field6` enum('opt1','opt2','opt3','opt4','opt5','opt6') NOT NULL, 
    PRIMARY KEY (`field1`), 
    KEY `field5` (`field5`), 
    KEY `field2` (`field2`), 
    KEY `field4` (`field4`), 
    KEY `field6` (`field6`) 
) ENGINE=MyISAM DEFAULT CHARSET=utf8; 

我期望的行長度是46.

  • 32爲CHAR(32)
  • 2 SMALLINT(5)
  • 2 SMALLINT(5)
  • 8爲日期時間
  • 1枚舉
  • 1枚舉

但相反的行長度爲111每次我嘗試它的時候。爲什麼這是我找不到任何解釋。難道我做錯了什麼?

回答

2

char(32)的UTF8字段每個字符最多使用3個字節。

+0

謝謝,我曾看過[本頁](http://dev.mysql.com/doc/refman/5.1/en/charset-unicode-utf8.html),但顯然沒有真正閱讀它。我看到「基本拉丁字母,數字和標點符號使用一個字節」的部分。但沒有注意到「MySQL必須爲每個字符保留三個字節」的部分。 – richardthepratt 2011-06-13 13:56:23

1

utf8 char的大小是3或4字節在mysql中

0

你沒有做錯什麼。這是正常的。

+0

這不是對「*我無法找到任何解釋爲什麼這是」的答案* – 2012-03-14 20:28:06

相關問題