MySQL如何解释VARCHAR字段大小?

时间:2018-06-08 02:40:12

标签: mysql

假设一个字段如此声明:

VARCHAR(255)

可以存储多少个字符,是255还是256?并且使用了多少空间?

我们应该使用2的幂然后减1,还是无关紧要?

2 个答案:

答案 0 :(得分:2)

在MySQL中,<header> <h1>FLEXBOX LAYOUT PROOF OF CONCEPT</h1> </header> <div class="layout__body"> <main class="layout__content"> <div id="absolutepositioned">FIXED!</div> <div style="color: #00FFFF;"><b>the blue box should be here</b> </div> </main> <nav class="layout__nav layout__columns"> NAV ITEMS<br> NAV ITEMS<br> NAV ITEMS<br> NAV ITEMS<br> NAV ITEMS<br> NAV ITEMS<br> NAV ITEMS<br> NAV ITEMS<br> NAV ITEMS<br> NAV ITEMS<br> </nav> <aside class="layout__aside layout__columns">YOUR VIAGRA ADS HERE</aside> </div> <footer> FOOTER </footer>将使用varchar(255)(最大值)来存储数据,使用255 bytes来存储有关该数据的元数据(长度信息)。基本上,它将是1 byte。现在,您可以在2^8中存储多少个字符取决于您正在使用的字符集。

您需要解决的字节数&amp;存储字符取决于字符集总共有多少个字符。

答案 1 :(得分:0)

VARCHAR(255)最多可以存储255个字符,无论字符集编码所需的每个字符的字节数是多少。

存储要求是存储的实际数据的长度(不是最大值),加上1或2个字节来存储数据的长度 - 除非以字节为单位的最大可能长度,否则使用1个字节。 255 ...所以VARCHAR(255) COLLATE utf8mb4使用2个字节来存储长度,而VARCHAR(255) COLLATE ascii_general_ci使用1个字节来存储长度。任何一列都可以存储不超过255个字符。

根据存储的数据声明列大小。使用255是常见的,但通常是草率设计的红旗,因为这个特定值很少有意义地表示列的最大适当长度。

相比之下,CHAR(255) COLLATE utf8mb4每行每列消耗255×4(最大可能)字节,并且存储长度为0字节,因为存储的长度不变。这些列很少适用,除非列始终是已知长度且字符集是单字节,例如UUID,它将是CHAR(36) COLLATE ascii_general_ci

https://dev.mysql.com/doc/refman/5.7/en/storage-requirements.html#data-types-storage-reqs-strings