中英文所占字节数

本文通过一个Java程序示例,展示了不同字符编码方式下英文字符“A”与中文字符“人”的字节长度变化。实验涵盖了GB2312、GBK、GB18030等常见编码及UTF-8、UTF-16等国际标准。

package com.test;

import java.io.UnsupportedEncodingException;

public class byteCountTest {
   
    public static void printByteCount(String str , String encoding) {
        int length = 0;
        try {
            length = str.getBytes(encoding).length;
        } catch (UnsupportedEncodingException e) {
            length = 0;
        }
        System.out.println(encoding + " : " + length);
    }
   
    public static void main(String[] args) {
        String en = "A";
        String ch = "人";
        printByteCount(en, "GB2312");
        printByteCount(en, "GBK");
        printByteCount(en, "GB18030");
        printByteCount(en, "ISO-8859-1");
        printByteCount(en, "UTF-8");
        printByteCount(en, "UTF-16");
        printByteCount(en, "UTF-16BE");
        printByteCount(en, "UTF-16LE");
        System.out.println("-------------------------");
        printByteCount(ch, "GB2312");
        printByteCount(ch, "GBK");
        printByteCount(ch, "GB18030");
        printByteCount(ch, "ISO-8859-1");
        printByteCount(ch, "UTF-8");
        printByteCount(ch, "UTF-16");
        printByteCount(ch, "UTF-16BE");
        printByteCount(ch, "UTF-16LE");
    }
   
}

 

结果:

GB2312 : 1
GBK : 1
GB18030 : 1
ISO-8859-1 : 1
UTF-8 : 1
UTF-16 : 4
UTF-16BE : 2
UTF-16LE : 2
-------------------------
GB2312 : 2
GBK : 2
GB18030 : 2
ISO-8859-1 : 1
UTF-8 : 3
UTF-16 : 4
UTF-16BE : 2
UTF-16LE : 2

在 MySQL 中,字符所用的字节数取决于**字符集(character set)**和**字符本身的内容**。中文字符和数字在不同的字符集中用的字节数不同,下面我们以常见的字符集为例进行详细说明。 --- ## ✅ 1. 常见字符集与字节用 | 字符集 | 单字符最大字节数 | 说明 | |---------------|------------------|------| | `latin1` | 1 字节 | 只支持英文和部分符号 | | `gbk` | 2 字节 | 支持简体中文,1 个中文字符 = 2 字节 | | `utf8mb3` | 3 字节 | 支持大部分字符,但不支持表情符号 | | `utf8mb4` | 4 字节 | 完整支持 emoji 表情,1 个中文字符 = 3 字节 | --- ## ✅ 2. 数字和中文在不同字符集下的字节用 ### 示例:字符 `'A'`、`'1'`、`'中'`、`'😊'` | 字符 | 字符集 | 字节数 | 说明 | |------|--------|--------|------| | `'A'`(英文字母) | `utf8mb4` | 1 字节 | ASCII 字符 | | `'1'`(数字) | `utf8mb4` | 1 字节 | ASCII 字符 | | `'中'`(中文) | `utf8mb4` | 3 字节 | 汉字在 utf8mb4 中 3 字节 | | `'中'`(中文) | `gbk` | 2 字节 | gbk 中文字符编码 | | `'😊'`(表情) | `utf8mb4` | 4 字节 | 表情符号需要 4 字节 | --- ## ✅ 3. 如何查看字段的实际字节长度? MySQL 提供了两个函数用于查看长度: - `CHAR_LENGTH(str)`:返回字符数。 - `LENGTH(str)`:返回字节数。 ### 示例: ```sql SELECT 'A' AS char1, CHAR_LENGTH('A') AS char_len1, LENGTH('A') AS byte_len1, '1' AS char2, CHAR_LENGTH('1') AS char_len2, LENGTH('1') AS byte_len2, '中' AS char3, CHAR_LENGTH('中') AS char_len3, LENGTH('中') AS byte_len3, '😊' AS char4, CHAR_LENGTH('😊') AS char_len4, LENGTH('😊') AS byte_len4; ``` ### 输出示例(使用 `utf8mb4`): | char1 | char_len1 | byte_len1 | char2 | char_len2 | byte_len2 | char3 | char_len3 | byte_len3 | char4 | char_len4 | byte_len4 | |-------|-----------|-----------|-------|-----------|-----------|-------|-----------|-----------|-------|-----------|-----------| | A | 1 | 1 | 1 | 1 | 1 | 中 | 1 | 3 | 😊 | 1 | 4 | --- ## ✅ 4. 字段定义时的字节限制 当你定义一个字段如 `VARCHAR(255)`,它表示**最多 255 个字符**,而不是字节。 - 在 `utf8mb4` 中,`VARCHAR(255)` 最多用 `255 * 4 = 1020` 字节。 - 所以,字段的实际存储空间取决于字符集。 --- ## ✅ 5. 如何查看当前数据库/表/字段的字符集? ```sql -- 查看数据库字符集 SHOW VARIABLES LIKE 'character_set_database'; -- 查看表的字符集 SHOW CREATE TABLE your_table_name; -- 查看字段的字符集 SELECT COLUMN_NAME, CHARACTER_SET_NAME, COLLATION_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'your_table_name'; ``` --- ### 相关问题:
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值