在 SQL 中选择 CHAR 而不是 VARCHAR 的用例有哪些?

2023-11-27

我意识到如果我的所有值都是固定宽度的,则建议使用 CHAR。但是,那又怎样?为了安全起见,为什么不为所有文本字段选择 VARCHAR?


一般规则是选择CHAR如果所有行都接近相同长度. Pick VARCHAR (or NVARCHAR) 当。。。的时候长度不同显著地。 CHAR 也可能更快一些,因为所有行的长度都相同。

它因数据库实现而异,但通常是 VARCHAR(或NVARCHAR) 除了实际数据之外,还使用一两个字节以上的存储空间(用于长度或终止)。因此(假设您使用的是单字节字符集)存储单词“FooBar”

  • CHAR(6)= 6 字节(无开销)
  • VARCHAR(100)= 8 字节(2字节开销)
  • CHAR(10)= 10 字节(浪费4个字节)

底线是CHAR can be faster和更多节省空间对于长度相对相同的数据(两个字符长度差之内)。

Note:Microsoft SQL 对于 VARCHAR 有 2 个字节的开销。这可能因数据库而异,但通常,至少需要 1 个字节的开销来指示 VARCHAR 上的长度或 EOL。

正如所指出的Gaven在评论中:事情发生了变化多字节字符集,并且在这种情况下 VARCHAR 成为更好的选择。

关于声明长度的注释VARCHAR:因为它存储了实际内容的长度,所以你不会浪费未使用的长度。所以存储6个字符VARCHAR(6)、VARCHAR(100)、orVARCHAR(最大值)使用相同的存储量。详细了解使用时的差异VARCHAR(最大值)。你声明一个maximumVARCHAR 中的大小来限制存储的数量。

在评论中永远学习指出Microsoft Transact-SQL 文档似乎说相反。我认为这是一个错误,或者至少文档不清楚。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 SQL 中选择 CHAR 而不是 VARCHAR 的用例有哪些? 的相关文章

  • 仅选择 SQL 关系中的最大值?

    我有以下两个关系 Game id name year Devs pid gid role 其中 Game id 是主键 Devs gid 是 Game id 的外键 我想编写一个 SQL 查询来查找参与该游戏的人数最多的游戏 我写了以下查询
  • INSERT INTO ... SELECT ... 是否始终按序号位置匹配字段?

    我的测试似乎证实了这一点 INSERT INTO a x y SELECT y x FROM b maps b y to a x 即字段仅按顺序位置匹配 而不按名称匹配 情况总是如此吗 即 我可以依赖这种行为吗 很遗憾 文档 http ms
  • 如何使用 linq to sql 一次更新多行?

    Table id userid friendid name status 1 1 2 venkat false 2 1 3 sai true 3 1 4 arun false 4 1 5 arjun false 如果用户发送userid 1
  • 向 sql select 查询添加新的空列

    我有以下 sql 选择查询 select column1 column2 from mytable 是一种向表中不存在的查询添加空列的方法 例如 select column1 column2 empty int column from my
  • 了解 Oracle Apex_Application.G_Fnn 以及如何使用它

    我对 Oracle apex application gfnn 的工作原理以及它是否仅适用于 Oracle ApEx 中的标准 SQL 报告或仅适用于 SQL 可更新报告 即表格形式 感到非常困惑 基本上我试图使用这个示例 SQL 来实现以
  • 使用每个单独行的多个“where”子句更新多行

    我正在尝试像这样更新我的表 Update MyTable SET value 1 WHERE game id 1 x 4 y 8 SET value 2 WHERE game id 1 x 3 y 7 SET value 3 WHERE g
  • LEFT JOIN 返回与 INNER JOIN 相同的结果

    我有一张桌子 磨砂膏 里面有 1600 个独特的物品 第二张桌子有100万以上 我运行 INNER JOIN 并获得 65 个匹配项 SELECT a BW Parent Number a Vendor Name b Parent Supp
  • 帮助将二进制图像数据从 SQL Server 读取到 PHP 中

    我似乎无法找到将二进制数据从 SQL 服务器读取到 PHP 的方法 我正在开发一个项目 需要能够将图像直接存储在 SQL 表中 而不是文件系统上 目前 我一直在使用这样的查询 插入 myTable 文档 选择 从 OPENROWSET BU
  • SQL 选择与带有通配符的 URL 匹配的行

    我在数据库中有一个表 其中一列包含一个 URL 例如http example com users http example com users 轮廓 我得到了一个 URL 例如http example com users 234 profi
  • SQL 语法检查器和验证器? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 有没有类似 SQL 的 lint 语法检查器和验证器 之类的东西 有一个项目 SQLLint 检测 S
  • 为什么 SQL Server 不推荐使用 SET ANSI_PADDING OFF?

    根据 MSDN BOL 在线书籍 SET ANSI PADDING http msdn microsoft com en us library ms187403 aspx 在 Microsoft SQL Server 的未来版本中 ANSI
  • 如何获取共同好友列表

    你好 我想知道如何才能找到共同的朋友 我目前在思考这个问题时遇到问题 我有一个名为 users 的表 它是这样的 id name 1 Kenny 2 Jack 3 Jimmy 4 Chris 5 Meg 6 Jake 7 Micheal 8
  • 如何在存储过程中使用名称求和和分组?

    我想对钱列求和 但我想要状态中的组名称和代码 这是存储过程代码 Sql Server 2008 SELECT um upmoney as money um pId as code um FName as name up status as
  • 从多行中获取/选择值到sql server中的1行中

    我有一个表格 每列都有一些图像 Acd unq id Emp unq id Acd BImg1 Acd BImg2 Acd RImg1 Acd RImp2 Acd RImg3 Acd Active 1 1745 BinaryImg Bina
  • 转置和聚合 Oracle 列数据

    我有以下数据 Base End RMSA Item 1 RMSA Item 2 RMSA Item 3 RMSB Item 1 RMSB Item 2 RMSC Item 4 我想将其转换为以下格式 Key Products RMSA RM
  • 从 CTE 插入

    WITH DTL AS SELECT CMPI CODE CMN CDTY MTRL CMI WT FACTOR CMI CNTRCT RATE PL PRESENT PRICE TRM CODE ROUND NVL PRESENT PRI
  • T-SQL 中结果集的幂集(所有组合)

    我需要一个 t sql 代码来获取结果集的幂集 输入示例 ColumnName 1 2 3 Example Output one columns as nvarchar 1 2 3 1 2 1 3 2 3 1 2 3 输出集可能包含重复值
  • ADO.NET 池连接无法重用

    我正在开发一个 ASP NET MVC 应用程序 该应用程序使用 EF 6 x 来处理我的 Azure SDL 数据库 最近 随着负载的增加 应用程序开始进入无法再与 SQL 服务器通信的状态 我可以看到有 100 个到我的数据库的活动连接
  • 删除或更改 ETL 中的记录

    我有一个表 我在上面构建了 ETL 服务 货物记录 到达 离开 进入表格 我已经这样做了 我的桌子将被删除 当项目标识符第二次到达数据库时 两条记录都被删除 label cost time x2 29 14 5 2020 01 00 00
  • sql查询中case语句中的布尔值

    我在选择查询中使用 case 语句 类似这样 Select col1 col2 isActive case when col3 abc then 1 else 0 end col4 from

随机推荐

  • 如何从 bootRun 传递 JVM 选项

    我正在开发与远程主机通信的简单 Spring Web 应用程序 我想在公司代理后面在本地测试它 我使用 Spring Boot gradle 插件 问题是如何指定 JVM 的代理设置 我尝试了几种方法来做到这一点 gradle Dhttp
  • 使用 Apache Beam 按键处理事件的总排序

    问题背景 我正在尝试从实时流中生成每个键的事件项的总 线性 顺序 其中顺序是事件时间 源自事件有效负载 Approach 我曾尝试使用流式传输来实现此目的 如下所示 1 设置一个非重叠的顺序窗口 例如时长5分钟 2 建立允许的迟到 可以丢弃
  • 自动日期/时间解析器,无需指定格式[关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 目前不接受答案 我正在寻找一个java库 它可以将字符串解析为POJO而不指定格式 我研究过POjava 还有其他库可以做类似的事情吗 DateTime dateT
  • 为什么Spark要将Map阶段的输出保存到本地磁盘?

    我试图深入了解 Spark Shuffle 过程 当我开始阅读时 我遇到了以下几点 Spark 完成后将 Map 任务 ShuffleMapTask 输出直接写入磁盘 我想了解以下关于 Hadoop MapReduce 的内容 如果Map
  • 在 Meteor.js 中,如何让两个开发项目使用同一个 Mongo 实例?

    我希望两个单独的应用程序使用相同的 Mongo DB 实例 并且由于我同时开发它们 因此我希望能够共享相同的开发数据库实例 我意识到 Meteor 的每个实例都必须在它自己的端口上运行 有没有办法像系统版本的MongoDB一样强制meteo
  • 当每个请求的应用程序 ID 和应用程序密钥都不同时,使用omniauth-facebook 吗?

    The omn iauth facebook自述文件提到了如何在初始化程序中设置它以及如何设置选项 例如scope仅根据请求 我想知道是否也可以为每个请求设置应用程序 ID 和应用程序密钥 你可以这样做 在您的omniauth rb 上 执
  • 在 Service Worker / fetch() 中识别 HTTP 304

    我构建了一个服务工作人员 它始终使用缓存中的数据进行响应 然后在后台向服务器发送请求 如果服务器响应HTTP 304 not modified一切都很好 如果服务器响应HTTP 200 这意味着数据已更改 新文件已放入缓存中 同时通知用户并
  • 初始化 ST-Link 设备时出错 - 无法连接到设备

    我目前正在使用 ST Link 调试器对我的 STM32F3 Discovery 板进行编程 我使用的IDE是Atollic TrueStudio 5 5 2 现在我面临一个非常奇怪的问题 那就是我不断收到消息 初始化 ST Link 设备
  • Selenium WebDriver (2.25) 超时不起作用

    我想我已经阅读了 Stack Overflow 上的所有 Selenium 超时问题 但隐式或显式超时在我的 Selenium webdriver 2 25 Python 2 7 绑定 中都不起作用 并且 no timeout here 行
  • 如何将 ContinuationToken 与递归文件夹迭代器一起使用

    由于 Drive API 配额 服务配额以及脚本执行时间的限制6 min将 Google Drive 文件操作拆分为多个块通常很重要 我们可以用属性服务储藏continuationToken for 文件夹迭代器 or 文件迭代器 这样我们
  • 使用 PyYAML 将文档作为 yaml 中的原始字符串加载

    我想解析 yaml 文档 如下所示 meta info 1 val1 meta info 2 val2 Plain text markdown content jhaha If I load all使用 PyYAML 我得到以下内容 gt
  • weblogic jsessionid

    我在本地运行 Weblogic 10 3 并对它生成的 sessionId 有疑问 当我打印 session getId 时 我看到类似这样的内容 BBp9TAACMTglQ2TDFAKR4tpyXg73LZDQJ2PtT9x8htG1tW
  • API 19 上的 Android Gradle Multidex 构建问题

    我有一个已启用的项目multidex避免65k limit并且productFlavors 开发 API 21 和产品 API 19 用于定制 构建我的项目API 21即开发风格是成功的 但是API 19即产品风味 它在应用程序任务中不断给
  • 如何使用python连接三个excel文件xlsx?

    你好 我想使用 python 连接三个 excel 文件 xlsx 我尝试过使用 openpyxl 但我不知道哪个函数可以帮助我将三个工作表附加到一个中 您有什么想法如何做到这一点吗 多谢 这是一个pandas基于的方法 它正在使用open
  • OpenCover/NUnit 找不到 PDB 文件

    我正在使用 OpenCoverhttp nuget org packages opencover并编写了以下批处理文件来运行单元测试并生成代码覆盖率统计信息 echo off echo echo Running NUnit tests ec
  • 启动 django 服务器时,我不断收到 NotImplementedError 错误 [重复]

    这个问题在这里已经有答案了 下面是错误的完整跟踪 请告诉我什么可以解决这个问题 env C Users LENOVO Desktop SD backend gt python manage py runserver Watching for
  • Python 2.X 中的 range 和 xrange 函数有什么区别?

    显然 xrange 更快 但我不知道为什么它更快 除了到目前为止的轶事之外没有证据表明它更快 或者除此之外还有什么不同 for i in range 0 20 for i in xrange 0 20 在 Python 2 x 中 rang
  • C 中大量字符的字节顺序

    我正在用 C 语言进行一些套接字编程 并尝试解决字节顺序问题 我的请求 发送 很好 但是当我收到数据时 我的字节全部乱序 我从这样的事情开始 char aResponse char malloc 512 int total recv soc
  • 错误:[错误号 10053]

    如果我在 Flask 上编码 有时会出现以下错误 Traceback most recent call last File C Python27 lib SocketServer py line 284 in handle request
  • 在 SQL 中选择 CHAR 而不是 VARCHAR 的用例有哪些?

    我意识到如果我的所有值都是固定宽度的 则建议使用 CHAR 但是 那又怎样 为了安全起见 为什么不为所有文本字段选择 VARCHAR 一般规则是选择CHAR如果所有行都接近相同长度 Pick VARCHAR or NVARCHAR 当 的时