我知道utf8
在MySQL中存储为固定长度为3个字节(24位),而utf4mb4
是固定的4个字节。我认为拉丁文1是一个固定长度的1个字节 - 我的问题是MySQL ascii类型7位,并且与Latin-1相比,存在一些小的存储空间吗?MySQL字符串编码存储空间
回答
您的初始前提不正确。在VARCHAR
以及*TEXT
列中,utf8和utf8mb4字符只消耗每个字符的utf8表示所需的尽可能多的字节存储量。唯一固定的多字节分配是CHAR
列,因为它们的宽度是固定的。
提示:要使用UTF-8节省空间,请使用VARCHAR而不是CHAR。否则,MySQL必须在CHAR CHARACTER SET utf8列中为每个字符保留三个字节,因为这是最大可能的长度。例如,MySQL必须为CHAR(10)CHARACTER SET utf8列预留30个字节。
http://dev.mysql.com/doc/refman/5.6/en/charset-unicode-utf8.html
否则,存储UTF8和utf8mb字符时,每个字符的最大字节数是用于每个字符不:
使用UTF8(或utf8mb4)时Unicode字符设置时,必须记住并非所有字符都使用相同的字节数,并且可能需要高达每个字符三(4)字节。 [强调]
http://dev.mysql.com/doc/refman/5.6/en/storage-requirements.html
没有7比特存储字节跨度字符集。
但是,压缩整个表可以在较新的版本中完成,并且如果您拥有足够的CPU,则启用表压缩时服务器可以实际执行得更好,如果磁盘相对较慢或服务器花费了大量时间I/O限制。
http://dev.mysql.com/doc/refman/5.6/en/innodb-compression.html
我并不是说我们的列大小是固定的,而是一个字符的大小。我很清楚text和varchar是可变的。我所说的是,UTF8通常是1字节到4字节,但在MySQL中,UTF8字符总是3字节,以速度的名义。这就是为什么utf8mb4存在的原因,因为像表情符号这样的东西需要4个字节,并且不能在MySQL中表示utf8 – donatJ 2014-10-29 13:19:36
我已经从文档中添加了一个额外的引用 - MySQL中的utf8字符是3字节的*最大值*,但是*最小* 1个字节。你似乎在说MySQL中的utf8字符总是占用3个字节的“固定长度”,就好像存在着为了提高速度而故意存储效率低下的情况,但情况并非如此。MySQL中的utf8字符在行数据中只占用与UTF8编码中存储该字符所需的字节数相同的字节数(除了在'CHAR'列中,在所有字符最大时必须分配最大可消耗空间的情况下宽度)。 – 2014-10-29 16:44:25
- 1. Python的AES编码/解码字符串和存储在MySQL中
- 2. Python编码空间字符
- 3. 在MySQL中存储任何字符编码的字符串并检索它们
- 4. 在MySQL数据库中存储空字符串与空值?
- 5. 在存储在MySQL表字段中的JSON编码字符串中搜索
- 6. mySQL只存储部分字符串
- 7. MySQL存储和搜索字符串
- 8. mysql转义字符串存储
- 9. 在mysql中存储gziped字符串
- 10. MySQL存储函数 - 追加字符串
- 11. 什么是DynamoDB编号和字符串数据类型存储空间
- 12. 存储字符串
- 13. 存储字符串
- 14. 存储字符串
- 15. 如何存储大字符串节省空间
- 16. 空间复杂度O(1)存储字符串
- 17. 字符串数组存储时间
- 18. sIFR编码non-breaking空间字符 - %20
- 19. C++将修改后的MySQL时间戳存储为字符串
- 20. 在数据库中存储/生成条形码字符串(mysql)
- 21. 在字符串内存储字符串?
- 22. 在字符串中存储字符串
- 23. 存储空字符串的Hibernate在DB中创建空白空间。
- 24. 在Sencha Touch中将存储数据编码为JSON字符串
- 25. 将base64编码的字符串存储为文件
- 26. Unicode字符串的固定长度存储的正确编码?
- 27. 编码字符串
- 28. 编码字符串
- 29. 编码字符串
- 30. Base64编码的字符串不正确地保存到MySQL
“我知道,UTF8在MySQL存储为一个固定长度的3个字节(24位)”从回答重复的风险,但只是要确定你明白:没有** **,utf8是**不存储为固定长度的3个字节。而且我不会**在这里讲述char vs varchar,字符存储在例如文本字段中的方式将根据特定字符的需要使用一个,两个或三个字节。 – 2016-10-17 16:31:45
@FélixGagnon-Grenier我从此知道了。 – donatJ 2017-04-05 17:31:19
是的,tbh我不记得我为什么评论这个。这个问题在答案中已经很清楚地解释了...... – 2017-04-05 23:26:20