關於stackoverflow的通用建議是在MySQL中無處不在的地方使用utf8或utf8mb4,即使對於只包含拉丁字符的字段也是如此。在MySQL中使用拉丁字符集存儲電子郵件和域名
- What is the best character set for email field?
- best character set and collation for storing Tags, and URLs in MySQL DB
爲了澄清,僅含拉丁字符一列,將使用utf8mb4:
- ...導致較大的指數和更高的內存使用情況?
- ...使用列類型varchar(100)或char(100)時使用更多的存儲空間?
- ...允許多於100個字符存儲在列類型varchar(100)或char(100)中?
當你說電子郵件地址可以包含非ASCII,我相信那些需要在驗證之前進行punyencoded,最終使他們成爲ASCII。儘管我同意存儲成本在很大程度上不相關,但考慮到在虛擬機中運行db的少量ram可用,索引/內存成本仍然相關。 – nwarp
定義「小」?即使是現在最薄弱的VPS設備也帶有512MB的內存,而且我沒有任何麻煩地運行了很多東西。這主要是調整數據庫服務器以使用適當的內存量,而不是過分積極地進行交換。在與電子郵件地址相關的內存和存儲方案中,您的擔憂是最少的。您更關心的問題將是如何管理應用程序代碼的日誌,指標和內存佔用情況。 – tadman
通常情況下,您最好將電子郵件地址存儲起來,並讓電子郵件傳送過程找出如何發送。自己做編碼並不重要,Punycoding只是解決方案的一半,本地部分使用完全不同的編碼方法。如果你關心內存,Punycoding的方向是錯誤的,它比等效的UTF-8表示要大得多。 – tadman