我知道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