我知道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. 在存储在MySQL表字段中的JSON编码字符串中搜索
- 2. MySQL存储和搜索字符串
- 3. mySQL只存储部分字符串
- 4. 什么是DynamoDB编号和字符串数据类型存储空间
- 5. 存储字符串
- 6. 存储字符串
- 7. 存储字符串
- 8. sIFR编码non-breaking空间字符 - %20
- 9. C++将修改后的MySQL时间戳存储为字符串
- 10. 在数据库中存储/生成条形码字符串(mysql)
- 11. 在字符串内存储字符串?
- 12. 在字符串中存储字符串
- 13. 将base64编码的字符串存储为文件
- 14. 在Sencha Touch中将存储数据编码为JSON字符串
- 15. 编码字符串
- 16. Base64编码的字符串不正确地保存到MySQL
- 17. MySQL:获取空字符串或空字符串
- 18. 字符串有空间
- 19. 空间SQL字符串VBA
- 20. 空间从字符串
- 21. 将编码的ASCII字符串转换为原始字符以存储在MySQL表中
- 22. SQL存储字符串
- 23. LINQ - 存储为字符串
- 24. 存储XML字符串
- 25. 存储XML为字符串
- 26. 存储字符串的my.settings
- 27. MySQL位数据类型存储空间
- 28. JSF的inputText NumberConverter存储空字符串作为空
- 29. Mysql的比较字符串,不带空格DB-场空间
- 30. 空字符汇编代码
“我知道,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