系列十四、理解MySQL varchar(50)

发布时间:2024年01月08日

一、理解MySQL varchar(50)

1.1、概述

? ? ? ? 日常开发中,数据库建表是必不可少的一个环节,建表的时候通常会看到设定某个字段的长度为varchar(50),例如如下建表语句:

?那么怎么理解varchar(50)?这个分情况的,MySQL的版本不同,存储的字符长度也不同,具体来讲如下:

(1)4.0版本以下,varchar(50),指的是50字节,如果存放UTF8汉字时,只能存16个(每个汉字3字节);

(2)5.0版本以上,varchar(50),指的是50字符,无论存放的是数字、字母还是UTF8汉字(每个汉字3字节),都可以存放50个;

其实最好的办法是在自己数据库中建个表试试可以放多少汉字,现在公司开发中MySQL的版本至少都为5.xx版本及以上版本了,所以说varchar(50)是可以存50个汉字的;

1.2、验证?

1.2.1、当前MySQL的版本

1.2.2、数据库验证

(一)初始化表

DROP TABLE IF EXISTS `account`;
CREATE TABLE `account` ?(
?? ? `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键',
?? ? `is_deleted` int NOT NULL DEFAULT 0 COMMENT '删除标识 0:未删除、1:已删除',
?? ? `create_time` datetime NOT NULL COMMENT '创建时间',
?? ? `update_time` datetime NULL DEFAULT NULL COMMENT '修改时间',
?? ? `name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '姓名',
?? ? `money` decimal(10,0) NULL DEFAULT NULL COMMENT '账户余额',
?? ? `email` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '邮箱',
?? ? PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '账户表' ROW_FORMAT = DYNAMIC;

insert into `account` values
(null,0,now(),now(),'张三','1000000','zhangsan@qq.com'),
(null,0,now(),now(),'尼古拉斯赵四','3000000','zhaosi@qq.com');

(二)查询name占用几个字符

????????select `name`,char_length(`name`) from account;

????????

1.3、题外话?

MySQL中的length VS char_length:

length():mysql里面的length()函数是一个用来获取字符串长度的内置函数;

char_length():在mysql内置函数里面查看字符串长度的还有一个函数是char_length();

区别:

????????length(): 单位是字节,utf8编码下,一个汉字三个字节,一个数字或字母一个字节。gbk编码下,一个汉字两个字节,一个数字或字母一个字节;

????????char_length():单位为字符,不管汉字还是数字或者是字母都算是一个字符;

????????

文章来源:https://blog.csdn.net/HelloWorld20161112/article/details/135448945
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。