精华内容
下载资源
问答
  • 数据库表字段类型长度
    2022-06-24 21:46:07

    解释:变长字段定义的长度虽然不会影响服务器数据空间大小,但是对于客户端的内存有影响,因为客户端在用SQL从数据库读取数据时,首先会取到字段定义的长度,然后分配足够的内存,也就是说如果你定义的字段长度是1K,实际长度是10字节,要取1K记录,那客户端会分配1MB的内存, 但只保存了10K有效数据。这将会比较严重的浪费客户端内存。特别是一些高并发或者是取大量数据的场景,容易产生内存溢出。

    更多相关内容
  • 根据数据库表字段自动生成javaBean工具(支持Mysql,Oracle) , 能够智能开启驼峰标识 ,操作非常简单, 包含使用教程
  • mysql表字段类型长度限制

    千次阅读 2021-01-19 00:58:15
    前置条件本文使用的mysql版本均为5.7.24-log,innoDB引擎表字段长度的限制今天业务表需要添加字段,但是发现已经加不进去了,报以下错误。。。Row size too large.The maximum row size for the userd table type,...

    前置条件

    本文使用的mysql版本均为5.7.24-log,innoDB引擎

    表字段长度的限制

    今天业务表需要添加字段,但是发现已经加不进去了,报以下错误。。。

    Row size too large.The maximum row size for the userd table type,not counting BLOBs,is 65535.This includes storage over head,check the manual. You have to change some columns to TEXT or BLOBs.

    f71d329c0568

    图1

    首先出现这个问题的原因:

    定义字段过多,或定义字段类型(不包含TEXT、BLOBs)长度超过了表所能定义的最大长度65535字节(64k)

    因为历史原因,我们的业务表已经加了300多个字段。。。,至于为什么没有做表的垂直分割:

    1、业务表是分库分表,目前整个生产库数据量在4000万左右,做垂直分割,代价很大

    2、后台程序部分需要相应调整,因为字段较多,搞不好会出生产事故

    3、为了提高页面查询效率,我们记录检索采用的是es,只有查询单条记录才会走db。db记录变更都会同步到es,如果db做垂直分割,es的数据短期内无法处理

    垂直分割需要长远的规划,目前开销最小的处理办法就是:减少不必要的字段,在字段类型上做处理,具体如下:1、部分字段因为需求变更,现在已经用不到了,可以去掉;

    2、很多varchar类型字段需要那么大,可以调整大小;

    3、在字段长度加不下的情况下,可以将表字段定义为text,blob类型;

    延伸思考

    varchar最大长度?

    varchar长度范围为0~65535字节,以字符编码为字符集utfmb4(占四个字节)为例,最多可存储 65535 / 4 = 16383 个字,鉴于一般表中会包含主键和其他字段,这是最理想情况下。其实就是innodb可以支持的最大字段长度。

    int(8)可表示长度?

    不管是有符号(- 2^31 ~ 2^31 - 1)还是无符号(0 ~ 2^32 )都不受长度8的影响,这里的数字8只会影响展示宽度,且定义时指定 ZEROFILL最高位才会补0,数值长度超过8位也不会受指定宽度影响。如图2:ADD COLUMN `num` int(8) ZEROFILL NULL;

    f71d329c0568

    图2

    以上,如有问题,欢迎指正!

    展开全文
  • char 和 varchar 都是用来存储字符串类型的数据,但是他们保存和检索的方式不一样,char 属于固定长度的字符类型,varchar 属于可变长的字符类型。 gbk 一个字符 ,两个字节 例如: 值 char(4) 字节 ...

    一、字符串类型
    char 和 varchar 都是用来存储字符串类型的数据,但是他们保存和检索的方式不一样,char 属于固定长度的字符类型,varchar 属于可变长的字符类型。

    gbk 一个字符 ,两个字节

    例如:

    char(4)字节varchar(4)字节
    ‘’‘’8个字节’‘1个字节
    ‘ab’‘ab’8个字节‘ab’5个字节
    ‘abcd’‘abcd’8个字节‘abcd’9个字节
    ‘abcdefg’‘abcd’8个字节‘abcd’9个字节

    utf8 一个字符 ,三个字节

    例如:

    char(4)字节varchar(4)字节
    ‘’‘’12个字节’‘1个字节
    ‘ab’‘ab’12个字节‘ab’7个字节
    ‘abcd’‘abcd’12个字节‘abcd’13个字节
    ‘abcdefg’‘abcd’12个字节‘abcd’13个字节

    由于 char 是固定长度的,所以它的处理速度比 varchar 快得多,但是其缺点是浪费存储空间,程序需要对尾行空格进行处理,所以对那些变化不大并且查询速度有较高的要求的数据可以考虑使用 char 类型存储。

    在 MySQL 中,不同的存储引擎对 char 和 varchar 的使用原则有所不同。

    MyISAM 存储引擎

    • 建议使用固定长度的数列代替可变长度的数据列

    InnoDB 存储引擎

    • 建议使用 varchar 类型,对于 InnoDB 数据表,内部的行存储格式没有区分固定长度和可变长度,因此使用 char 列不一定比可变长度的 varchar 性能好
    • 由于 char 平均占用空间多于 varchar ,因此 varchar 要消化需要处理的数据行的存储总量和磁盘 I/O 是比较好的

    二、数字类型

    数据类型范围字节
    bigint-2^63 (-9,223,372,036,854,775,808) 到 2^63-1(9,223,372,036,854,775,807)8字节
    0到18446744073709551615较大整数
    int-2^31 (-2,147,483,648) 到 2^31-1 (2,147,483,647)4个字节
    0到4294967295标准整数
    smallint-2^15 (-32,768) 到 2^15-1 (32,767)2字节
    0到65535较小整数
    tinyint-2^7 (-128) 到 2^7 - 1 (123)1字节
    0到255非常小的整数
    float[(m,d)]±1.175494351e - 38 ( 单精度浮点数)4字节
    double[(m,d)]±2.2250738585072014e - 308 (双精度浮点数)8字节
    decimal(m,d)可变;其值的范围依赖于m 和d (一个串的浮点数)m+2字节


    id 必为主键,类型为 int bigint unsigned ,单表时自增、步长为 1;注意一下因为一些表可能因为数据量的关系导致主键会很大可能会超出 int 的范围这个时候就比较建议使用 bigint ,通常 int 即可。

    注:不过当一个表数据量超过了500万的时候或者单表容量超过 2GB 的时候推荐分库分表;这一步操作是需要事先对于数据量在项目上线之后的思考点

    UNSIGNED 属性就是将数字类型无符号化 ,unsigned 的使用

    注意 unsigned tinyint 的范围就是 0 - 255

     

    可以看到上图,0 - 255 内的数是可以正常写入数据表,而超出 0 -255 范围的是会报错 1264 (22003): Out of range value for column ‘id’ at row 1 超出范围。

    人的年龄可以使用 unsigned tinyint(表示范围 0 - 255,人的寿命在目前为止是不会超过 255 岁的)。

    status , sexuality 相对来说在系统中我们更愿意使用数字作为表示,代替实际该字段所传达的意思,因为 char 所占用的 3 个字节,相对来说 status , sexuality 比较适合使用 unsigned tinyint 。


    三、时间类型


    注意:默认情况下,当MySQL遇到超出范围的日期或时间类型的值或该类型的其他无效值时,它会将值转换为 “零” 值的值。唯一的例外是超出了范围。time 值被裁剪到 time 的范围。

    MySQL 允许在 date 或 datetime 列。这对于需要存储你可能不知道确切日期的生日的应用程序非常有用。在这种情况下,你只需将日期存储为 ‘2009-00-00’ 或 ‘2009-01-00’。如果存储这样的日期,就不应该期望得到正确的结果,例如:DATE_SUB() 或 DATE_ADD() 需要完整的日期。若要在日期中不允许零个月或日部分,请启用 NO_ZERO_IN_DATE 模式。

    MySQL 允许你存储 “零” 假值 “0000-00-00”。在某些情况下,这不使用 NULL 值,并使用较少的数据和索引空间。不允许 ‘0000-00-00’,启用 NO_ZERO_DATE 模式。


    DATETIME

    DATETIME 用于表示 年 月 日 时 分 秒 ,是 DATE 和 TIME 的组合,并且记录的年份比较长久。如果实际应用中有这样的需求,就可以使用 DATETIME 类型。

    1. DATETIME 列可以设置为多个,默认可为null,可以手动设置其值。
    2. DATETIME 列不可设定默认值。
    3. DATETIME 列可以变相的设定默认值,比如通过触发器、或者在插入数据时候,将 DATETIME 字段值设置为 now() ,这样就可以做到了,尤其是后者,在程序开发中常常用到。

    TIMESTAMP

    TIMESRAMP 用于表示 年 月 日 时 分 秒,但记录的年份比较短暂,TIMESTAMP 列必须有默认值,默认值可以为 “0000-00-00 00:00:00”,但不能为 null 。TIMESTAMP 和时区相关,更能反映当前时间。当插入日期时,会先转换为本地时区后再存放:当查询日期时,会将日期转换为本地时区后再显示。所以不同时区的人看到的同一时间是不一样的。表中的第一个 TIMESTAMP 列自动设置为系统时间(CURRENT_TIMESTAMP)。当插入或更新一行,但没有明确给 TIMESTAMP 列赋值,也会自动设置为当前系统时间。如果表中有第二个 TIMESTAMP 列,则默认值设置为 0000-00-00 00:00:00。TIMESTAMP 的属性受MySQL版本和服务器 SQLMode 的影响较大。如果记录的日期需要让不同时区的人使用,最好使用 TIMESTAMP。

    注:一般建表时候,创建时间用 datatime ,更新时间用 timestamp。


    DATA

    DATE 用于表示 年 月 日,如果实际应用值需要保存 年 月 日 就可以使用 DATE。


    TIME

    TIME 用于表示 时 分 秒,如果实际应用值需要保存 时 分 秒 就可以使用 TIME。


    YEAR

    YEAR 用于表示 年份,YEAR 有 2 位(最好使用4位)和 4 位格式的年。默认是 4 位。如果实际应用只保存年份,那么用 1 Bytes 保存 YEAR 类型完全可以。不但能够节约存储空间,还能提高表的操作效率。

    展开全文
  • 数据库表字段命名规范

    千次阅读 2022-04-28 07:25:58
    数据库表字段命名规范

    一、数据库命名规范

    采用26个英文字母(区分大小写)和0-9的自然数(经常不需要)加上下划线’‘组成,命名简洁明确,多个单词用下划线’'分隔,一个项目一个数据库,多个项目慎用同一个数据库

    二、数据库表命名规范

    2.1数据表命名规范

    (1)采用26个英文字母(区分大小写)和0-9的自然数(经常不需要)加上下划线’‘组成,命名简洁明确,多个单词用下划线’'分隔

    (2)全部小写命名,禁止出现大写

    (3)禁止使用数据库关键字,如:name,time ,datetime,password等

    (4)表名称不应该取得太长(一般不超过三个英文单词)

    (5)表的名称一般使用名词或者动宾短语

    (6)用单数形式表示名称,例如,使用 employee,而不是 employees

    明细表的名称为:主表的名称+字符dtl(detail缩写)

    例如:采购定单的名称为:po_order,则采购定单的明细表为:po_orderdtl

    (7)表必须填写描述信息(使用SQL语句建表时)

    2.2命名规范

    ①模块_+功能点 示例:alllive_log alllive_category

    ②功能点 示例:live message

    ③通用表 示例:all_user

    2.3待优化命名示例

    ①冗余:

    错误示例:yy_alllive_video_recomment yy_alllive_open_close_log

    说明:去除项目名,简化表名长度,去”yy_”

    ②相同类别表命名存在差异,管理性差

    错误示例:yy_all_live_category yy_alllive_comment_user

    说明:去除项目名,统一命名规则,均为”yy_alllive_”开头即可

    ③命名格式存在差异

    错误示例:yy_showfriend yy_user_getpoints yy_live_program_get

    说明:去除项目名,统一命名规则,动宾短语分离且动宾逻辑顺序统一

    三、数据库字段命名规范

    3.1字段命名规范

    (1)采用26个英文字母(区分大小写)和0-9的自然数(经常不需要)加上下划线’‘组成,命名简洁明确,多个单词用下划线’'分隔

    (2)全部小写命名,禁止出现大写

    (3)字段必须填写描述信息

    (4)禁止使用数据库关键字,如:name,time ,datetime password 等

    (5)字段名称一般采用名词或动宾短语

    (6)采用字段的名称必须是易于理解,一般不超过三个英文单词

    (7)在命名表的列时,不要重复表的名称

    例如,在名employe的表中避免使用名为employee_lastname的字段

    (8)不要在列的名称中包含数据类型

    (9)字段命名使用完整名称,禁止缩写

    3.2命名规范

    ①名词 示例:user_id user_name sex

    ②动宾短语 示例:is_friend is_good

    3.3待优化命名示例

    ①大小写规则不统一

    错误示例:user_id houseID

    说明:使用统一规则,修改为”user_id”,”house_id”

    ②加下划线规则不统一

    错误示例:username userid isfriend isgood

    说明:使用下划线进行分类,提升可性,方便管理,修改为”user_name”,”user_id”,”is_friend”,”is_good”

    ③字段表示不明确

    错误示例:uid pid

    说明:使用完整名称,提高可读性,修改为”user_id”,”person_id”

    3.4字段类型规范

    (1)所有字段在设计时,除以下数据类型timestamp、image、datetime、smalldatetime、uniqueidentifier、binary、sql_variant、binary 、varbinary外,必须有默认值,字符型的默认值为一个空字符值串’’,数值型的默认值为数值0,逻辑型的默认值为数值0

    (2)系统中所有逻辑型中数值0表示为“假”,数值1表示为“真”,datetime、smalldatetime类型的字段没有默认值,必须为NULL

    (3)用尽量少的存储空间来存储一个字段的数据

    使用int就不要使用varchar、char,

    用varchar(16)就不要使varchar(256)

    IP地址使用int类型

    固定长度的类型最好使用char,例如:邮编(postcode)

    能使用tinyint就不要使用smallint,int

    最好给每个字段一个默认值,最好不能为null

    (4)用合适的字段类型节约空间

    字符转化为数字(能转化的最好转化,同样节约空间、提高查询性能)

    避免使用NULL字段(NULL字段很难查询优化、NULL字段的索引需要额外空间、NULL字段的复合索引无效)

    少用text类型(尽量使用varchar代替text字段)

    3.5数据库中每个字段的规范描述

    (1)尽量遵守第三范式的标准(3NF)

     表内的每一个值只能被表达一次 
    
     表内的每一行都应当被唯一的标示 
    
     表内不应该存储依赖于其他键的非键信息
    

    (2)如果字段事实上是与其它表的关键字相关联而未设计为外键引用,需建索引

    (3)如果字段与其它表的字段相关联,需建索引

    (4)如果字段需做模糊查询之外的条件查询,需建索引

    (5)除了主关键字允许建立簇索引外,其它字段所建索引必须为非簇索引

    四、SQL语言编码规范

    4.1大小写规范

    (1)所有关键字必须大写,如:INSERT、UPDATE、DELETE、SELECT及其子句,IF……ELSE、CASE、DECLARE等

    (2)所有函数及其参数中除用户变量以外的部分必须大写

    (3)在定义变量时用到的数据类型必须小写

    4.2注释

    注释可以包含在批处理中,在触发器、存储过程中包含描述性注释将大大增加文本的可读性和可维护性,本规范建议:

    (1)注释以英文为主,实际应用中,发现以中文注释的SQL语句版本在英文环境中不可用,为避免后续版本执行过程中发生某些异常错误,建议使用英文注释

    (2)注释尽可能详细、全面创建每一数据对象前,应具体描述该对象的功能和用途,传入参数的含义应该有所说明,如果取值范围确定,也应该一并说明,取值有特定含义的变量(如boolean类型变量),应给出每个值的含义

    (3)注释语法:单行注释、多行注释

    单行注释:注释前有两个连字符(–)对变量、条件子句可以采用该类注释

    多行注释:符号之间的内容为注释内容,对某项完整的操作建议使用该类注释

    (4)注释简洁,同时应描述清晰

    (5)函数注释:

    编写函数文本–如触发器、存储过程以及其他数据对象–时,必须为每个函数增加适当注释,该注释以多行注释为主,主要结构如下:

    CREATE PROCEDURE sp_xxx

    展开全文
  • 修改表字段长度sql

    千次阅读 2022-02-16 09:06:28
    ALTER TABLE 表名 MODIFY COLUMN 字段名 数据类型(修改后的长度) alter table EXAM_TEST modify STU_NAME VARCHAR2(100); alter table EXAM_TEST modify STU_NAME VARCHAR2(100);
  • tab_columns t_column, user_tables t_tables where t_column.table_name = t_tables.table_name and t_tables.table_name like '%BM_B%' -- 模糊匹配的表名 and t_column.data_length 可根据字段长度 and t_column....
  • 1.打开DataGrip,选择要修改的表 2.选中表名右键,选择【Modify Table】 3.双击选中要修改的字段 4.输入新增的字段属性 5.点击【Execute】 6.刷新表,右键表名,选择【Refresh】 ......
  • ALTER TABLE [tableName] ALTER COLUMN [columnName] NVARCHAR(MAX) 如:ALTER TABLE PE_Message ALTER COLUMN Title NVARCHAR(MAX) 转载于:...
  • 数据库表字段规范

    2019-09-26 09:26:32
    2.外键名字修改成’关联对象——id’(例如:study表patient_id),数据库不设外键约束。 3.所有字段都增加非空约束,防止业务逻辑报npe异常。 4.使用utf8mb4字符集,防止表情出现乱码。 5.所有字段增加注释。(除非...
  • 二进制字符串类型 MYSQL的二进制数据类型有BIT,BINARY,MEDIUMBLOB和LONGBLOB。本节将讲解各类二进制字符串类型的特点和使用方法。表一列出了MYSQL中的二进制数据类型。 表一 类型名称 说明 存储需求 BIT(M) ...
  • SQL语句获取所有数据库名、表名、字段名、表字段长度获取数据库中所有的表SELECT SysObjects.name AS Tablename FROM sysobjects WHERE xtype = 'U'获取数据库中所有表的列名SELECT SysColumns.name AS Columnsname,...
  • 获取数据库表的所有字段的信息 select * from information_...获取数据库表字段名,长度类型,备注,是否能空 select column_name,COLUMN_TYPE,IS_NULLABLE,COLUMN_COMMENT from information_schema.columns w...
  • 在代码里"零长度字符串"用一对没有间隔的英文引号''表示,它的数据类型是明确的即属于字符型,存储"零长度字符串"是要占用物理磁盘空间的;而null值其数据类型是未知的,它不会占用物理磁盘空间。在不存在约束限制的...
  • 达梦数据库表字段创建索引,增加表字段、修改注释sql语句 注:达梦数据库在操作数据库的时候需要带上模式名、即 模式名+表名 1:字段创建索引 CREATE INDEX "idx_plan_year" ON "INDUSTRIAL_SCREEN"."BIZ_PROJECT_...
  • oracle 修改表字段长度

    千次阅读 2020-03-02 14:41:00
    alter table 表名 modify 列名 数据类型; alter table XXX modify aaaa varchar2(120);
  • 所以带着疑问来学习一下数据库表字段长度的设计。 长度限制和字段选择 查阅了资料后,发现了一些关于数据库的长度限制及表设计的相关资料 各个数据库表名和字段名长度限制 MySQL中各种数据类型的长度及在开发中如何...
  • 表字段长度的修改

    2021-10-21 23:15:02
    设置后,即可完成sqlserver数据库表字段长度的修改
  • 查系统视图,存放表信息,数据库名 表名,表字段名,字段类型,字段长度,默认值等等, SELECT *FROM user_col_comments 可以查看当前数据库用户所有表的字段详情; SELECT *FROM user_tab_comments 可以查看当前...
  • select column_name,data_type,DATA_LENGTH From all_tab_columns where table_name=upper('表名') AND owner=upper('数据库登录账号')
  • 1、查询字段类型 select b.name as tablename,a.name as columnname,c.name as typename,a.max_length as typelength from sys.columns a inner join sys.tables b on b.object_id=a.object_id inner join sys....
  • 数据库表字段命名规范-程卓

    千次阅读 2021-03-14 15:46:44
    一、数据库表命名规范1.1数据表命名规范(1)采用26个英文字母(区分大小写)和0-9的自然数(经常不需要)加上下划线'_'组成,命名简洁明确,多个单词用下划线'_'分隔(2)全部小写命名,禁止出现大写(3)禁止使用数据库...
  • ①:更改字段类型长度ALTER TABLE 表名ALTER COLUMN 字段名 类型长度–varchar(50)例:把城市表的城市字段原来长度为20改为30ALTER TABLE cityALTER COLUMN cname varchar(30)ALTER TABLE #tempALTER COLUMN bmmc ...
  • Oracle修改字段长度后,网页上的值还是原来的长度
  • 批量修改oracle的varchar2类型参数(Byte修改为Char) varchar2(byte) 和varchar2(char) 的区别 varchar2(byte) 存储的是字节。 varchar2(char) 存储的是字符。 1.为 AL32UTF8 时,1个汉字是1个字符,1个汉字占3个...
  • alter table 表名 modify(字段名 字段类型 ) 例: alter table A modify(name varchar2(4000)) 2.在表中有数据的情况下,不能直接使用modify,否则会报错,如图 思路分4,先将原字段改个名字,然后新增一个列,...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 20,930
精华内容 8,372
热门标签
关键字:

数据库表字段类型长度