MySQL如何确定VARCHAR大小问题

抛出一个问题,如果需要存字符串到MySQL数据库里面的一张表里的某个字段,如何确定字段的长度大小?

首先不建议使用TEXT类型的,因为使用TEXT会严重影响效率,最好的方式就是使用VARCHAR并确定字段的最大长度

我们可以先在表里定义一个字段rule_value,并设置长度为255,然后输入最小的json字符串进去:

使用MySQL的CHAR_LENGTH函数,计算rule_value的大小:

SELECT
   id,rule_type,rule_value,CHAR_LENGTH(rule_value) as rule_value_length,rule_mark
FROM
	test_table
WHERE
	rule_type = 'RANDOM_STR'

可以看到rule_value的长度为74:

因为rule_value的值是json数组,所以数组里面的值会不定变大,这个时候,就需要我们去问产品确认,里面的数组最大有多少个

经过询问,数组最大有10个,那么计算rule_value的长度为:

74*10=740

也就是740个字符,我们可以把之前rule_value的长度VARCHAR(255)改为VARCHAR(740)即可。

最后需要补充一点知识:

  • TEXT最多存65535个字符、MEDIUMTEXT最多存放16777215个字符、LONGTEXT最多存放4294967295个字符,不过一般都不建议使用;
  • 查看MySQL版本命令:select version()
  • MySQL版本4之前,按字节来计算,版本4之后按字符来计算;
  • LENGTH()返回以字节为单位的字符串的长度。CHAR_LENGTH()返回以字符为单位的字符串的长度。

到此这篇关于MySQL如何确定VARCHAR大小问题的文章就介绍到这了,更多相关MySQL VARCHAR大小内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • MySQL数据库中varchar类型的数字比较大小的方法

    创建测试表 -- ---------------------------- -- Table structure for check_test -- ---------------------------- DROP TABLE IF EXISTS `check_test`; CREATE TABLE `check_test` ( `id` int(11) NOT NULL AUTO_INCREMENT, `current_price` varchar(10) NOT NULL, `price`

  • Mysql varchar大小长度问题介绍

    4.0版本以下,varchar(20),指的是20字节,如果存放UTF8汉字时,只能存6个(每个汉字3字节) 5.0版本以上,varchar(20),指的是20字符,无论存放的是数字.字母还是UTF8汉字(每个汉字3字节),都可以存放20个,最大大小是65532字节 Mysql4中最大也不过是20个字节,但是Mysql5根据编码不同,存储大小也不同. 1.限制规则 字段的限制在字段定义的时候有以下规则: a) 存储限制 varchar 字段是将实际内容单独存储在聚簇索引之外,内容开头用1到2个字

  • MySQL如何确定VARCHAR大小问题

    抛出一个问题,如果需要存字符串到MySQL数据库里面的一张表里的某个字段,如何确定字段的长度大小? 首先不建议使用TEXT类型的,因为使用TEXT会严重影响效率,最好的方式就是使用VARCHAR并确定字段的最大长度. 我们可以先在表里定义一个字段rule_value,并设置长度为255,然后输入最小的json字符串进去: 使用MySQL的CHAR_LENGTH函数,计算rule_value的大小: SELECT id,rule_type,rule_value,CHAR_LENGTH(rule_v

  • MySQL动态修改varchar长度的方法

    虽然这种情况不应该发生,通常像我们关系型数据库,我们应该是事先设计好,以后不能改动,但是由于之前工作的疏忽,其实说实话,也不仅仅是我个人的疏忽,主要是沟通上的原因,当然数据库毕竟是我设计的,所以,还是自我批评一下. 说一下情况:MySQL字段有个varchar值字段设置的太短了,设置了30个,(我依稀记得varchar是可扩展的,当然现实并不容忍我的依稀),所以我只能找一个方法在保证数据库数据不变的情况下,动态修改varchar字段的长度,找了一段时间,终于让我找到了. alter table

  • 实例讲解MySQL统计库表大小

    统计每个库每个表的大小是数据治理的其中最简单的一个要求,本文将从抽样统计结果及精确统计结果两方面来统计MySQL的每个库每个表的数据量情况. 1.统计预估数据量 mysql数据字典库information_schema里记录了统计的预估数据量(innodb引擎表不准确,MyISAM引擎表准确)及数据大小.索引大小及表碎片的大小等信息. 如果想了解每个库及表的大概数据量级,可以直接查information_schema.tables进行统计即可.例如: SELECT table_schema,ta

  • MySQL CHAR和VARCHAR该如何选择

    VARCHAR 和 CHAR 类型 VARCHAR 和 CHAR 是两种主要的字符串类型,用于存储字符.不幸的是,由于实现的方式依赖于存储引擎,因此很难解释这些字符串在磁盘和内存中如何存储,除了除了常用的 InnoDB 和 MyISAM 外,假设你使用了其他存储引擎,应当仔细阅读存储引擎的文档.​ VARCHAR 存储可变长度的字符串,也是最常用的字符数据类型.相比固定长度的类型,VARCHAR 所需的存储空间更小,它会尽可能少地使用存储空间(例如,短的字符串占据的空间).对于 MyISAM 来

  • 详解Mysql中日期比较大小的方法

    假如有个表product有个字段add_time,它的数据类型为datetime,有人可能会这样写sql: 代码如下 select * from product where add_time = '2013-01-12' 对于这种语句,如果你存储的格式是YY-mm-dd是这样的,那么OK,如果你存储的格式是:2013-01-12 23:23:56这种格式你就悲剧了,这是你就可以使用DATE()函数用来返回日期的部分,所以这条sql应该如下处理: 代码如下 select * from produc

  • Mysql 查询数据库容量大小的方法步骤

    查询所有数据库的总大小 方法如下: mysql> use information_schema; mysql> select concat(round(sum(DATA_LENGTH/1024/1024),2),'MB') as data from TABLES; +-----------+ | data | +-----------+ | 3052.76MB | +-----------+ 1 row in set (0.02 sec) 统计一下所有库数据量 每张表数据量=AVG_ROW_L

  • MySQL CHAR和VARCHAR存储、读取时的差别

    导读 你真的知道CHAR和VARCHAR类型在存储和读取时的区别吗? 还是先抛几条结论吧: 1.存储的时候,CHAR总是会补足空格后再存储,不管用户插入数据时尾部有没有包含空格. 2.存储的时候,VARCHAR不会先补足空格后再存储,但如果是用户在插入时特地加了空格那就会如实存储,而不会给删除. 3.读取数据时,CHAR总是会删除尾部空格(哪怕是写入时包含空格). 4.读取数据时,VARCHAR总是如实取出之前存入的值(如果存储时尾部包含空格,就会继续保留着,不会像CHAR那样删除尾部空格).

  • MySQL中字符串比较大小详解(日期字符串比较问题)

    前言 数据库中在对于数字与非数字混合的字符串,在进行大小比较的时候,如果两字符串长度相等,那么两字符串就会比较相同位置的字符,比较时若字符是数字,则直接比较,若字符是非数字那么会转换为ascii码进行比较,若在某位置上已经有大小之分,那么就不会再进行比较. 如上所述,当字符串用于比较时间格式数据进行时间维度的比较时会出现问题.如以下sql进行查询时 select * FROM work_day_content as wdc WHERE wdc.work_day >= '2019-09-30 00

随机推荐