数据库中的 varchar(255) 原因剖析

数据库中的 varchar(255)

MySQL | ver < 4.1: VARCHAR以字节为单位存储,所以假设全部为常用汉字(UTF-8

3字节编码长度),则VARCHAR(255)共可存放约85个汉字;

MySQL | ver >= 4.1:

VARCHAR以字符为单位存储,假设输入仍然为常用汉字,则VARCHAR(255)可以存放255个汉字。

另外,据我所知,MySQL对UTF-8的支持也仅仅限于1~3字节编码长度(Unicode:0x0000~0xFFFF),可以满足大部分需求,但是生僻字就不行了。

那么VARCHAR的最大值是多少呢?

根据官方文档,VARCHAR 最多可以是 65535 字节(这也意味着一条记录只有这一个字段,因为 MySQL 一行只能包含 65535 字节)。

然而,无法为这么长的 VARCHAR 做索引,对于 MyISAM,可以对前 1000 个字节做索引,对于 InnoDB,则只有 767 字节。(来源依据)

在varchar长度接近256时,varchar长度设置成255的好处:

1、方便InnoDB建索引,对于 MyISAM,可以对前 1000 个字节做索引,对于 InnoDB,则只有 767 字节。(来源依据)。255X3=765

2、少申请一个字节,记录字符创长度,一个8位的tinyint,可以表示的无符号数值的范围是,0-255,如果长度超过了255,需要在申请个字节

原文地址:https://www.cnblogs.com/braveLN/p/11888076.html

时间: 2024-10-12 04:52:55

数据库中的 varchar(255) 原因剖析的相关文章

关于数据库中char,varchar,varchar(2)的区别

数据库中的char类型用于存储定长类型;效率比varchar要稍高,但是,占用空间比varchar要多. 比如"asd",对于char(9)就表示存储9个字节(包括6个空字节),在取值的时候就需要.trim()把两边的空号去掉. 对于varchar(9),则是按照实际字节数存储的,只存储三个字节. oracle中,会有一个varchar2型的数据类型,varchar2型与varchar型的区别: 1.varchar2把所有字符都占两字节处理(一般情况下),varchar只对汉字和全角等

调用save()方法,页面显示保存成功,但是数据库中没有值的原因

在DAO层调用save()方法,页面上显示成功,但是在数据库中查找时发现数据没有保存到数据库中的原因可能是: 1.Service层中是否在调用DAO层中的save()方法之前添加注解@Transactional,凡是对数据库的更新操作都要加上该句注解. 2.查看项目中的WEB-INF文件夹下面的application.xml文件,看看<tx:annotation-driven transaction-manager="transactionManager"/>标签中是否缺少

数据库中char, varchar, nvarchar的差异

char     char是定长的,也就是当你输入的字符小于你指定的数目时,char(8),你输入的字符小于8时,它会再后面补空值.当你输入的字符大于指定的数时,它会截取超出的字符.    nvarchar(n)     包含 n 个字符的可变长度 Unicode 字符数据.n 的值必须介于 1 与 4,000 之间.字节的存储大小是所输入字符个数的两倍.所输入的数据字符长度可以为零.        varchar[(n)]       长度为 n 个字节的可变长度且非 Unicode 的字符数

WordPress数据库中的表、字段、类型及说明

wp_categories: 用于保存分类相关信息的表.包括了5个字段,分别是: cat_ID – 每个分类唯一的ID号,为一个bigint(20)值,且带有附加属性auto_increment. cat_name – 某个分类的名称,为一个varchar(55)值. category_nicename – 指定给分类的一个便于记住的名字,也就是所谓的slug,这是一个varchar(200)值. category_description – 某个分类的详细说明,longtext型值. cate

数据库中varchar和Nvarchar区别与联系

在数据库中新建表的时候发现了字段类型有的带n有的不带n,那么两者之间有什么区别? 于是上网查找一些资料如下: 一. 1.CHAR.CHAR存储定长数据很方便,CHAR字段上的索引效率级高,比如定义char(10),那么不论你存储的数据是否达到了10个字节,都要占去10个字节的空间,不足的自动用空格填充,所以在读取的时候可能要多次用到trim(). 2.VARCHAR.存储变长数据,但存储效率没有CHAR高.如果一个字段可能的值是不固定长度的,我们只知道它不可能超过10个字符,把它定义为 VARC

关于数据库中varchar/nvarchar类型数据的获取注意事项

当在页面后台获取数据库表中某字段的数据时,需注意该数据的类型.防止因实际数据的字符长度因达不到指定数据类型规定的字符长度而导致空格的占位符. 比如: MSSQL中某一表的结构如下:   表中的数据: 当从表中获取某一个用户名(userName)或密码(userPwd)时,如果取出的数据作为条件进行判断是,需注意获取处的数据最好进行Trim()处理,去除数据两边的空格占位符 比如: 没有对数据进行Trim()处理前,从数据库中获取的数据因为原本的数据长度不够而导致空格占位符 对数据进行Trim()

数据库中存储日期的字段类型到底应该用varchar还是datetime

将数据库中存储时间的数据类型改为varchar(),这时最好让这些时间是数据库中自动生成的(一个没有格式的输入也可能会导致输出错误),因为存储类型为varchar(),所以获取到的值也就被认为是一个字符串,直接将数据库中的时间字符串进行转化(这时那些转化函数是能识别数据库中的时间函数的),客户端的时间格式不再影响转换过程. 不过数据库中存储时间的类型如果为字符型也会带来一些麻烦: 数据库中的时间仅仅是用来显示.查找的,那么影响还不算大,但如果对时间字段进行一些算法如计算星期.DateDiff.D

数据库 的事务日志已满。若要查明无法重用日志中的空间的原因,请参阅 sys.databases 中的 log_reuse_wait_desc 列。

一种方法:清空日志.1.打开查询分析器,输入命令 SQL code? 1  DUMP TRANSACTION 数据库名 WITH NO_LOG 2.打开企业管理器,在数据库上点右键->属性->选项->故障恢复-模型-选择-简单模型.(也可以直接在查询分析器里执行: SQL code? 1 alter database 数据库名 set recovery simple  3.右键你要压缩的数据库--所有任务--收缩数据库--收缩文件--选择日志文件--在收缩方式里选择收缩至XXM,这里会给

网络采集软件核心技术剖析系列(6)---将任意博主的全部博文下载到SQLite数据库中并通过Webbrower显示(将之前的内容综合到一起)

一 本系列随笔目录及本节代码下载 开发环境:VS2008 本节源码位置:https://github.com/songboriceboy/GatherAllStoreInDB 源码下载办法:安装SVN客户端(本文最后提供下载地址),然后checkout以下的地址:https://github.com/songboriceboy/GatherAllStoreInDB 系列文章提纲拟定如下: 1.如何使用C#语言获取博客园某个博主的全部随笔链接及标题:2.如何使用C#语言获得博文的内容:3.使用C#