• varchar类型存储英文和汉字占用的字节和字符数


    编码格式知识

    一、关于 UTF-8

    UTF-8(Unicode Transformation Format-8bit)。是用以解决国际上字符的一种多字节编码。

    对英文使用 8 位(即一个字节) ,中文使用 24 位(三个字节)来编码

    UTF-8包含全世界所有国家需要用到的字符,是国际编码,通用性强。

    UTF-8编码的文字可以在各国支持 UTF-8 字符集额的浏览器上显示。 如果是UTF-8编码,则在外国人的英文 IE 也能显示中文,他们无需下载 IE 的中文语言支持包。

    二、关于 GBK

    GBK 是国家标准 GB2312 基础上扩容后兼容 GB2312 的标准。

    GBK的文字编码是用双字节来表示的,即不论中、英文字符均使用双字节来表示,为了区分中文,将其最高位都设定成 1。

    GBK包含全部中文字符,是国家编码,通用性比 UTF8 差,不过 UTF8 占用的数据库比GBK大。

    三、关于 utf8mb4

    MySql 5.5 之前,UTF8 编码只支持 1-3 个字节,只支持 BMP 这部分的 unicode 编码区,BMP 是基本就是 0000 ~ FFFF 这一区。

    从 MySQL 5.5 开始,可支持 4 个字节 UTF 编码 utf8mb4,一个字符最多能有 4 字节,所以能支持更多的字符集。

    utf8mb4 is a superset of utf8

    tf8mb4 兼容 utf8,且比 utf8 能表示更多的字符。

    至于什么时候用,看你做的什么项目了……在做移动应用时,会遇到IOS用户在文本的区域输入emoji表情,如果不做一定处理,就会导致插入数据库异常。

    四、汉字长度与编码有关

    MySql 5.0 以上的版本

    1、一个汉字占多少长度与编码有关:

    UTF-8:一个汉字 = 3 个字节,英文是一个字节

    GBK: 一个汉字 = 2 个字节,英文是一个字节

    2、varchar(n) 表示 n 个字符,无论汉字和英文,MySql都能存入 n 个字符,仅实际字节长度有所区别。好比varchar(20),指的是20字符,无论存放的是数字、字母还是UTF8汉字(每个汉字3字节),都可以存放20个。

    3、MySQL 检查长度,可用 SQL 语言

    SELECT LENGTH(fieldname) FROM tablename;

    验证示例

    验证5.0版本以上UTF-8编码格式下varchar类型存储英文和汉字占用的字节和字符数——一个汉字3 个字节,英文是一个字节。

    # 创建表

    CREATE TABLE `str_test` (

      `str_ch` varchar(20) CHARACTER SET utf8 DEFAULT NULL COMMENT '中文字符',

      `str_en` varchar(20) CHARACTER SET utf8 DEFAULT NULL COMMENT '英文字符'

    ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4

    # 插入数据

    INSERT INTO `drools`.`str_test`(`str_ch`, `str_en`)

    VALUES ('新年快乐', 'happy new year');

    # '新年快乐'占用的长度(字节数)和占用的字符数

    # 'happy new year'占用的长度(字节数)和占用的字符数

     

     <END>

    ⭐️希望本文章对您有帮助,您的「 转发、点赞 是我创作的无限动力。

    扫描下方二维码关注微信公众号,您会收到更多优质文章推送。

  • 相关阅读:
    ubuntu16.04系统安装
    SQL注入之Sqli-labs系列第二十六关(过滤空格、注释符、逻辑运算符注入)和第二十六A
    提权心法(2)提权基本流程
    布尔盲注
    提权心法(1)信息搜集很重要
    POST注入-双注入
    POST型注入-报错注入
    字符型注入
    Web中间件常见安全漏洞总结
    SSRF 从入门到批量找漏洞
  • 原文地址:https://www.cnblogs.com/liaowenhui/p/15861247.html
Copyright © 2020-2023  润新知