utf8 mb4

本文探讨了Java中使用u1F601作为UTF-8MB4字符时,在MySQL创建的两个不同表格(UTF8与UTF8MB4)中插入数据后的差异。

java 里面字符串 "\u1F601"  是utf8 mb4的


mysql 里面

CREATE TABLE no_mb4 (t VARCHAR CHARACTER SET utf8 COLLATE utf8_general_ci)
CREATE TABLE mb4 (t VARCHAR CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci)



如果往这两张表里面插入utf8mb4 的字符串,两张表将得到不一样的结果。

### UTF8MB3 和 UTF8MB4 字符编码区别 UTF8MB3 是早期版本的 UTF-8 编码实现,在 MySQL 中支持最多三个字节来表示一个字符[^1]。这意味着对于大多数常用字符集,如拉丁字母、西里尔字母和其他常见符号,都能很好地工作。 然而随着互联网的发展以及对更多样化文字的支持需求增加,出现了需要四个字节才能正确存储的表情符号(Emoji)、一些罕用汉字以及其他 Unicode 扩展区中的特殊字符。为此引入了更完整的 UTF8MB4 编码方案,它能够处理多达四字节长度的字符[^2]。 ```sql -- 查看当前数据库默认字符集 SHOW VARIABLES LIKE 'character_set_database'; ``` ### 存储空间差异 由于每个字符可能占用不同数量的字节,因此相同字符串在两种编码方式下的实际存储大小会有所变化: - 对于只包含基本多文种平面 (BMP) 内部字符的数据而言,两者之间几乎没有差别; - 当涉及到辅助平面 (SIP/Astral Planes) 上面定义的一些罕见字符时,则采用 `utf8mb4` 可能会使数据量增大约三分之一左右[^3]。 ```sql -- 创建表并指定不同的字符集 CREATE TABLE test_utf8 ( id INT AUTO_INCREMENT PRIMARY KEY, text_column VARCHAR(255) CHARACTER SET utf8mb3 -- 使用 utf8mb3 ); CREATE TABLE test_utf8mb4 ( id INT AUTO_INCREMENT PRIMARY KEY, text_column VARCHAR(255) CHARACTER SET utf8mb4 -- 使用 utf8mb4 ); ``` ### 性能影响 尽管存在额外的空间开销,但在现代硬件环境下这种差距通常是可以接受甚至忽略不计的;更重要的是选择合适的字符编码可以避免因无法正常显示某些特定字符而导致的应用程序逻辑错误或用户体验问题[^4]。 ### 安全性和兼容性考量 从安全角度来看,使用更为全面和支持最新标准的 `utf8mb4` 能够更好地防止潜在的安全漏洞,比如 SQL 注入攻击中利用未被正确转义或多字节序列解析不当造成的风险。此外,考虑到未来可能出现的新字符加入 Unicode 标准库的情况,提前迁移到 `utf8mb4` 有助于保持系统的长期稳定运行和良好维护性[^5]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值