首页
学习
活动
专区
圈层
工具
发布

MySql中varchar和char,如何选择合适的数据类型?

背景 学过MySQL的同学都知道MySQL中varchar和char是两种最主要的字符串类型,varchar是变长的类型,而char是固定长度。...那关于如何选择类型就成为令人头疼的事,很多初学者为了保证业务兼容性强,存储字符串类型一律都是varchar类型。这是不妥的,需要根据varchar和char的特性来进行选择。...varchar和char数据类型的区别 varchar类型用于存储可变长的字符串,是比较常见常用的字符串数据类型,在存储的字符串是变长时,varchar更加节约空间。...由于varchar是变长的,在使用update的时候,可能使得行变得比原来更长,这就导致需要做额外的工作。...; char适用的场景: 列的长度为定值时适合适用,比如:MD5密文数据 varchar和char的优缺点 varchar的优点: 变长的字符串类型,兼容性更好 varchar的缺点: 使用varchar

3.6K20
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    在Mysql中CHAR和VARCHAR如何选择?给定的长度到底是用来干什么的?

    于是又讨论到了varchar在MySQL中的存储方式。,以证明增加长度所占用的空间并不大。那么我们就看看varchar在mysql中到底是如何存储的。 ?...varchar类型在mysql中是如何定义的? 先看看官方文档: ? ?...另外,varchar类型的实际长度是它的值的实际长度+1,这一个字节用于保存实际使用了多大的长度。 ALL IN ALL 在MySQL数据库中,用的最多的字符型数据类型就是Varchar和Char.。...不过在实际工作中,由于某系特殊的原因,会在这里设置例外。...拓展: 还有就是我们在使用索引的时候,在插入和更新的时候使用的是指定的长度还是正式字符的长度????我给自己留个问好? ? 竟然创建成功了。看了下是自动截取了255个字符。

    5.1K51

    如何快速安全的插入千万条数据?

    每个字段使用逗号分隔,需要尽量在半小时内入库。...思路 1.估算文件大小 因为告诉文件有千万条,同时每条记录大概在20个字段左右,所以可以大致估算一下整个订单文件的大小,方法也很简单使用FileWriter往文件中插入一千万条数据,查看文件大小,经测试大概在...1.5G左右; 2.如何批量插入 由上可知文件比较大,一次性读取内存肯定不行,方法是每次从当前订单文件中截取一部分数据,然后进行批量插入,如何批次插入可以使用insert(...)values(...)...因为是大文件解析,如果中途出现错误,比如数据刚好插入到900w的时候,数据库连接失败,这种情况不可能重新来插一遍,所有需要记录每次插入数据的位置,并且需要保证和批次插入的数据在同一个事务中,这样恢复之后可以从记录的位置开始继续插入...Github地址中的batchInsert模块,本地设置每次截取的文件大小为2M,经测试1000w条数据(大小1.5G左右)插入mysql数据库中,大概花费时间在20分钟左右,当然可以通过设置截取的文件大小

    82440

    如何快速安全的插入千万条数据?

    最近有个需求解析一个订单文件,并且说明文件可达到千万条数据,每条数据大概在20个字段左右,每个字段使用逗号分隔,需要尽量在半小时内入库。...思路 1.估算文件大小 因为告诉文件有千万条,同时每条记录大概在20个字段左右,所以可以大致估算一下整个订单文件的大小,方法也很简单使用FileWriter往文件中插入一千万条数据,查看文件大小,经测试大概在...1.5G左右; 2.如何批量插入 由上可知文件比较大,一次性读取内存肯定不行,方法是每次从当前订单文件中截取一部分数据,然后进行批量插入,如何批次插入可以使用insert(...)values(...)...900w的时候,数据库连接失败,这种情况不可能重新来插一遍,所有需要记录每次插入数据的位置,并且需要保证和批次插入的数据在同一个事务中,这样恢复之后可以从记录的位置开始继续插入。...经测试1000w条数据(大小1.5G左右)插入mysql数据库中,大概花费时间在20分钟左右,当然可以通过设置截取的文件大小,花费的时间也会相应的改变。

    1.4K20

    如何快速安全的插入千万条数据?

    思路 1.估算文件大小 因为告诉文件有千万条,同时每条记录大概在20个字段左右,所以可以大致估算一下整个订单文件的大小,方法也很简单使用FileWriter往文件中插入一千万条数据,查看文件大小,经测试大概在...1.5G左右; 2.如何批量插入 由上可知文件比较大,一次性读取内存肯定不行,方法是每次从当前订单文件中截取一部分数据,然后进行批量插入,如何批次插入可以使用insert(...)values(...)...因为是大文件解析,如果中途出现错误,比如数据刚好插入到900w的时候,数据库连接失败,这种情况不可能重新来插一遍,所有需要记录每次插入数据的位置,并且需要保证和批次插入的数据在同一个事务中,这样恢复之后可以从记录的位置开始继续插入...如上代码在一个事务中同时保存批次订单数据和文件解析位置信息,batchInsert通过使用mybatis的标签来遍历订单列表,生成values数据; 总结 以上展示了部分代码,完整的代码可以查看...Github地址中的batchInsert模块,本地设置每次截取的文件大小为2M,经测试1000w条数据(大小1.5G左右)插入mysql数据库中,大概花费时间在20分钟左右,当然可以通过设置截取的文件大小

    1.4K20

    关于mysql的join

    在mysql 查询关联中,有以下几种关联形式: 1:1对1关联,每次查询数据关联数据都只有一条数据 2:1对多关联,每次查询数据关联数据为1条以上 同时,根据关联主次关系,以及数据量的大小,可以区分各种情况...每次查大量数据 2:A,B 1对1关联,B数据总量80万,A数据总量90万 ,每次查少量数据/每次查大量数据 3:A,B 1对多关联,B数据总量90万,A数据总量80万,每次查少量数据/每次查大量数据 在关联需求中...,所以可以忽略索引问题 3:查询次数,每次查询,意味着mysql都需要进行一次sql命令解析->sql查询->数据传回,查询次数越少则越快 4:数据组装,当使用join,order by,group by...while循环获取,本文使用的foreach其实在原生查询中,可以省略好几个步骤,应该是分开查询更快 第二个案例: 每次查询10条,1对多关联 该案例 由于查询数据量并不大, user_list表字段数据并不多...(如果字段数多,也会影响),一条数据大头在article_list中 同时因为分开查询,将增加一次查询次数, 关系到了第3点的说明 所以导致分开查询比join查询更慢了差不多一倍.

    1.5K20

    教师听课评课系统设计

    需求分析:管理教师安排任课教师课程,安排听课教师,听课教师到教室听课,使用手机记录学生表现、教师表现、综合表现、以及建议,告别纸质化。...课后授课教师查看所有听课人对本节课程的相关评价,教学主任查看所有授课教师所授课程的记录和评价等信息。...逻辑设计: 1.管理教师:定制听课安排,选择授课教师、学科、班级、时间、填写授课章节和课题,选择课程类型,填写听课人数限制。...', startTime dateTime comment '开始时间', endTime dateTime comment '结束时间' ) ENGINE=InnoDB AUTO_INCREMENT...'课程id', startTime dateTime comment '开始时间', endTime dateTime comment '结束时间' ) ENGINE=InnoDB AUTO_INCREMENT

    1.6K40

    教师听课评课系统设计

    需求分析:管理教师安排任课教师课程,安排听课教师,听课教师到教室听课,使用手机记录学生表现、教师表现、综合表现、以及建议,告别纸质化。...课后授课教师查看所有听课人对本节课程的相关评价,教学主任查看所有授课教师所授课程的记录和评价等信息。...2.评课教师:填写课堂教学评价:学生表现、教师表现、综合表现,并选定等级(优良中差),填写建议。 3.授课教师:查看自己所有授课的评价。 4.教学处主任:查看所有人的授课评价。...id', startTime dateTime comment '开始时间', endTime dateTime comment '结束时间' ) ENGINE=InnoDB AUTO_INCREMENT...'课程id', startTime dateTime comment '开始时间', endTime dateTime comment '结束时间' ) ENGINE=InnoDB AUTO_INCREMENT

    2.7K41

    一条SQL就能解决,为啥要写代码?

    LEFT JOIN 关键字,会从左表 (user) 返回所有的行,即使在右表 (project) 中没有匹配的行。...想自己操作的,后台回复“ARTS”,获取完成SQL数据文件,导入MySQL即可使用。...") String startTime, @Param("endTime") String endTime, @Param("weeks") int weeks); 核心代码逻辑功能就实现了,在这里我们定义了一些参数...,比如startTime和endTime可以计算自定义时间段的打卡情况,只需要加上Controller接口就完成了。...总结: 在后端开发中,基本使用Mybatis框架自动生成增删该查的代码。对于复杂的逻辑,我们可以通过@Select注解来写SQL解决。而且,如果对SQL语句比较熟练的话,可以少写很多代码逻辑呢!

    1.3K30

    将MySQL去重操作优化到极致

    外层查询也要扫描t_source表的100万行数据,在与导出表做链接时,对t_source表每行的item_id,使用auto_key0索引查找导出表中匹配的行,并在此时优化distinct操作,在找到第一个匹配的行后即停止查找同样值的动作...在MySQL 8之前,该语句是单线程去重的最佳解决方案。仔细分析这条语句,发现它巧妙地利用了SQL语句的逻辑查询处理步骤和索引特性。...因为重复created_time和item_name的多条数据中可以保留任意一条,所以oevr中不需要使用order by子句。...并行执行 下面分别使用shell后台进程和MySQL Schedule Event实现并行。...; end // 为了记录每个事件执行的时间,在事件定义中增加了操作日志表的逻辑,因为每个事件中只多执行了一条insert,一条update,4个事件总共多执行8条很简单的语句

    8.9K30

    万字长文详解 MyCat 分表分库:从 0 到 1 构建高可用订单系统

    本文将带你全面掌握 MyCat 在订单系统中的分表分库实战,从理论到实践,包含完整可运行代码和最佳实践。 一、MyCat 核心原理:分布式数据库的 "智能路由器" 1.1 什么是 MyCat?...1.2 MyCat 核心概念 在使用 MyCat 之前,我们需要理解几个核心概念: 逻辑库(schema)MyCat 中定义的数据库,对应应用程序看到的数据库 逻辑表(table)MyCat 中定义的表...,对应应用程序看到的表 数据节点(dataNode)实际存储数据的数据库和表,如db1.order_0 分片键(shardingKey)用于分片的字段,如user_id 分片规则(rule)数据如何分配到不同节点的规则...") LocalDateTime startTime, @Param("endTime") LocalDateTime endTime); /** * 根据订单状态和时间范围统计订单数量...解决方案: 使用 MyCat 的 dataDiff 和 dataMigrate 工具进行数据迁移 采用 "双写" 策略:同时写入旧分片和新分片,验证无误后切换 迁移过程中通过监控确保数据一致性 数据迁移步骤

    63110

    EasySwoole之链路追踪

    什么是链路追踪 链路追踪一般常用于分布式架构中,当实现一个功能的同时,可能会依次调用多个接口,那么此时这一些列的接口调用,称为调用链。...1 : 0; $data['start_time'] = $v['startTime']; $data['end_time'] = $v['endTime...']; $data['spend_time'] = $v['endTime']-$v['startTime']; $data['status'] = $v...$data['add_time'] = time(); $data['ip'] = $clientAddress; //此处应做个白名单来处理那些api接口调用需要记录到表...此时简单的链路追踪已实现,并没有多次调用链接,如果想要实现复杂的链路追踪,请移步easyswoole官网->组件->链路追踪组件查看,其次此组件可以当成甩锅神器(前端接口出现的问题)以及系统性能排查来使用

    1K20
    领券