返回顶部
首页 > 资讯 > 数据库 >MySQL中需要注意的字段长度问题
  • 474
分享到

MySQL中需要注意的字段长度问题

2024-04-02 19:04:59 474人浏览 薄情痞子
摘要

在Mysql的表结构设计中,突然想起来几个地方碰到的问题比较多,大体来说一个就是字符集,一个就是数据类型。 而字符集和数据类型结合起来,就有一个蛮有意思的细节,那就是行长度的问题。 比如我们

Mysql的表结构设计中,突然想起来几个地方碰到的问题比较多,大体来说一个就是字符集,一个就是数据类型。

而字符集和数据类型结合起来,就有一个蛮有意思的细节,那就是行长度的问题。

比如我们创建一个表使用了varchar的类型,如果指定为gbk,表里含有一个字段,可以指定为32766字节,如果再长一些就不行了。

其中的计算方式就需要理解了,因为varhcar类型长度大于255,所以需要2个字节存储值的长度,而mysql里面的页的单位是16k,使用了ioT的方式来存储。所以如果超过了这个长度,那就会有溢出的情况,和oracle的overflow很类似。

所以对于gbk类型,行长度最大为65535,则varchar列的最大长度算法就是 (65535-2)/2 =32766.5,所以此处就是32766了。

> create table test_char(v varchar(32766)) charset=gbk;
Query OK, 0 rows affected (0.00 sec)
> create table test_char1(v varchar(32767)) charset=gbk;
ERROR 1118 (42000): Row size too large. The maximum row size for the used table type, not counting BLOBs, is 65535. You have to change some columns to TEXT or BLOBs而另外一种字符集,也是默认的字符集latin1,有些系统支持火星文的还是会喜欢用这种字符集。

它的长度就不一样了,对应是1字节,所以varchar(32767)是没有任何问题的,而最大长度就是65532了。
> create table test_char1(v varchar(32767)) charset=latin1;
Query OK, 0 rows affected (0.01 sec)
> create table test_char2(v varchar(65535)) charset=latin1;
ERROR 1118 (42000): Row size too large. The maximum row size for the used table type, not counting BLOBs, is 65535. You have to change some columns to TEXT or BLOBs而对于utf8还是有很大的差别,对应的是3个字节,所以需要除以3,按照(65535-2)/3,最大值就是21844了。
> create table test_char2(v varchar(21844)) charset=utf8;    
Query OK, 0 rows affected (0.00 sec)
> create table test_char3(v varchar(21845)) charset=utf8;
ERROR 1118 (42000): Row size too large. The maximum row size for the used table type, not counting BLOBs, is 65535. You have to change some columns to TEXT or BLOBs上面的场景相对来说会有一些局限性,那么我们引入表结构的设计。

如果是gbk字符集,含有下面的几个字段,则memo字段的varchar类型最大长度是多少?

> create table test_char3(id int,name varchar(20),memo varchar(32766)) charset=gbk;
ERROR 1118 (42000): Row size too large. The maximum row size for the used table type, not counting BLOBs, is 65535. You have to change some columns to TEXT or BLOBs

这个问题还是如法炮制,应用之前的计算方式,数值型是4个字节,字符型乘以2,含有字符型的长度小于255,所以减去1即可,这样下来就是(65535-1-4-20*2-2)约等于32743

> create table test_char3(id int,name varchar(20),memo varchar(32744)) charset=gbk;
ERROR 1118 (42000): Row size too large. The maximum row size for the used table type, not counting BLOBs, is 65535. You have to change some columns to TEXT or BLOB两种测试结果可以简单对比一下。
> create table test_char3(id int,name varchar(20),memo varchar(32743)) charset=gbk;
Query OK, 0 rows affected (0.01 sec)
select (65535-1-4-20*2-2)/2;
+----------------------+
| (65535-1-4-20*2-2)/2 |
+----------------------+
|           32744.0000 |
+----------------------+
1 row in set (0.00 sec)


整个过程还是需要考虑到这些点的,否则前期不够重视,在后面去做扩展的时候就会有很大的限制。

您可能感兴趣的文档:

--结束END--

本文标题: MySQL中需要注意的字段长度问题

本文链接: https://lsjlt.com/news/49770.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • MySQL中需要注意的字段长度问题
    在MySQL的表结构设计中,突然想起来几个地方碰到的问题比较多,大体来说一个就是字符集,一个就是数据类型。 而字符集和数据类型结合起来,就有一个蛮有意思的细节,那就是行长度的问题。 比如我们...
    99+
    2024-04-02
  • pythonnp.arange步长0.1的问题需要特别注意
    目录np.arange 步长0.1问题1)count输出什么?2)count输出是什么?python步长的使用np.arange 步长0.1问题 两个小测试: 1)count输出什么...
    99+
    2024-04-02
  • 新手站长建站需要注意的问题
    本篇内容介绍了“新手站长建站需要注意的问题”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!网络大潮中,一批又一批站长前仆后继,为了梦想,为了幸...
    99+
    2023-06-12
  • Mysql表设计需要注意的问题
    下面探讨的数据库为MySQL 存储引擎为innodb因为这是最常见的,使用最多的数据库和引擎 什么是页分裂? 这是因为聚簇索引采用的是平衡二叉树算法,而且每个节点都保存了该主键所对应行的数据,假设插入数据的主键是自增长的,那么根据二叉树算...
    99+
    2015-04-28
    Mysql表设计需要注意的问题
  • spring中@value注解需要注意的问题
    首先,@value需要参数,这里参数可以是两种形式:@Value("#{configProperties['t1.msgname']}")或者@Value("${t1.msgname}");其次,下面我们来看看如何使用这两形式,在配置上有什...
    99+
    2023-05-31
    spring 注解 ue
  • 站长创建链接时需要注意哪些问题
    本篇内容主要讲解“站长创建链接时需要注意哪些问题”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“站长创建链接时需要注意哪些问题”吧!  使用付费链接  许多网站站长创建链接时会使用付费链接,这些链...
    99+
    2023-06-10
  • 闪回点需要注意的问题
    sys@newtestCDB> select * from v$recovery_file_dest; NAME SPACE_LIMIT SPACE_USED SPACE_RECLAIMAB...
    99+
    2024-04-02
  • Oracle移植到MySQL需要注意哪些问题
    这篇文章主要介绍“Oracle移植到MySQL需要注意哪些问题”,在日常操作中,相信很多人在Oracle移植到MySQL需要注意哪些问题问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大...
    99+
    2024-04-02
  • 个人站长自己创业需要注意的问题有哪些
    本篇内容主要讲解“个人站长自己创业需要注意的问题有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“个人站长自己创业需要注意的问题有哪些”吧!不要仅仅因为情谊而组成团队    ...
    99+
    2023-06-12
  • PostgreSQL有哪些需要注意的问题
    这篇文章主要讲解了“PostgreSQL有哪些需要注意的问题”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“PostgreSQL有哪些需要注意的问题”吧!1:...
    99+
    2024-04-02
  • Java需要注意的问题有哪些
    这篇文章主要介绍了Java需要注意的问题有哪些,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。Top 1:"abc"=="abc"返回的...
    99+
    2023-06-17
  • MySQL中如何修改字段长度
    要修改MySQL中的字段长度,可以使用ALTER TABLE语句结合MODIFY COLUMN关键字来进行修改。以下是一个示例: A...
    99+
    2024-04-09
    MySQL
  • MySQL处理空值时需要注意的两个问题
    本篇内容介绍了“MySQL处理空值时需要注意的两个问题”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!MyS...
    99+
    2024-04-02
  • python字符串需要注意的语法问题有哪些
    小编给大家分享一下python字符串需要注意的语法问题有哪些,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!Python主要用来做什么Python主要应用于:1、W...
    99+
    2023-06-14
  • Python 科学计算精度需要注意的问
    对于金融方面的计算和分析,往往会忽略科学计算方面精度控制的问题。该问题针对于 Python2 & Python3 这里我们来看一个问题: num=0.0 for i in range(10): ...
    99+
    2023-01-31
    需要注意 精度 科学
  • AndroidSeekBar在刷新使用中需要注意的问题
    目录问题分析问题解决方法Android开发笔记:关于SeekBar在刷新使用中的一些问题 问题 今天在用Navigation 在两个Fragment之间导航时发现了从第二个Fragm...
    99+
    2023-05-19
    Android SeekBar Android SeekBar刷新问题
  • Oracle remap_schema需要注意的问题有哪些
    这篇文章主要介绍“Oracle remap_schema需要注意的问题有哪些”,在日常操作中,相信很多人在Oracle remap_schema需要注意的问题有哪些问题上存在疑惑,小编查阅了各式资料,整理出...
    99+
    2024-04-02
  • mint-ui loadmore组件需要注意的问题
    小编给大家分享一下mint-ui loadmore组件需要注意的问题,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!如下所示:loadTop(){   this.$sto...
    99+
    2024-04-02
  • mysql error 1071: 创建唯一索引时字段长度限制的问题
    目录一、先描述一下问题吧二、显而易见三、问题和解决方案分析一、先描述一下问题吧 如下创建表时候报错了 CREATE TABLE `xxx` ( `id` bigint(20) NOT NULL AUTO_INCREME...
    99+
    2024-04-02
  • navicat怎么看表的字段长度要求
    在 navicat 中查看表的字段长度限制的步骤:连接到数据库。选择目标表。右键单击表,选择"表" > "编辑表"。切换到"字段"选项卡,查看字段的"数据类型"列中的长度限制。 ...
    99+
    2024-04-24
    navicat
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作