有谁知道使用 VarChar(255) 和 VarChar(65536) 之间的区别?
这是我目前所知道的:
我不确定这些 varchar 之间是否有任何性能差异。
假设我想创建一个包含多种类型行的表。 使用带有“data_type1”和“data_type2”的枚举
data_type1 在 varchar 中永远不会超过 255 个字符 data_type2 在 varchar 中将大部分超过 255 个字符
哪个解表会更好?
id (int) - autoincrement
type (enum : data_type1, data_type2)
msg (varchar(255))
data (TEXT)
当类型 == data_type2 时仅使用“数据”列?
或
id (int) - autoincrement
type (enum : data_type1, data_type2)
msg (varchar(65536))
无论存在什么类型,都使用“消息”列?
为了处理目的,两种解决方案实际上都需要类型列。
编辑:
当type == data_type2时,存储的数据实际上不会超过10000个字符
编辑 2:
我不想在 msg 和 data 列中搜索
这是一个关于存储性能的简单问题,而不是索引或搜索性能...
最佳答案
您提到了一些真实的事情,我将解释 VARCHAR 的工作原理。
如果您指定 VARCHAR(60),这意味着它最多可以容纳 60 个字符。如果它包含较少的字符,比如说 50 - 那么 MySQL 使用 50 个字节而不是 60 个字节来存储数据。
与 CHAR(60) 完全相反 - 它保留 60 个字节,而不管您要保存的字符串的长度。
现在,VARCHAR 是如何工作的?如果将其指定为 VARCHAR(255),则意味着该列将保留 1 个字节 + 字符串字节的长度。 那 1 个字节表示字符串的长度。 1 个字节 = 您可以存储 0 - 255 个值(2 的 8 次方 = 256)。
对于大于 255 的 VARCHAR,您需要以某种方式存储正在使用的字节数。由于 1 个字节最多只能存储 256 个不同的值(0 - 255),因此您需要使用两个字节。 2 的 16 次方 = 65536,这意味着您可以存储不超过该大小的任何字符串,然后将 2 个字节相加来表示字符串的长度。
所以,简而言之 - 性能差异在于,如果您有 VARCHAR(65536) 并且您使用 200 个字节来存储文本 - 您正在浪费 VARCHAR(65536) 将使用的 1 个额外字节。 有人可能会想“哦,但这只是 1 个字节,谁在乎呢”。很多人实际上是这样做的——想象在一个有 5000 万条记录的表上有几个 VARCHAR 列。假设您有 3 个 varchar 列,每个列都浪费了额外的字节——即 3 个字节 * 5000 万〜 144 兆字节的浪费空间。有趣的是,这不仅仅是浪费空间。当您想读取某些内容时,它还有助于处理开销和使用额外的 RAM。 谁说你的数据库中只有一张表会变大?
了解这些信息可能会帮助您决定最好使用什么。
http://dev.mysql.com/doc/refman/5.0/en/storage-requirements.html如果您之前没有检查过,它会解释每种数据类型的存储方式以及它需要多少空间。
关于MySQL 对 VarChar(255) 和 VarChar(65536) 的不同处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5898904/
Rackup通过Rack的默认处理程序成功运行任何Rack应用程序。例如:classRackAppdefcall(environment)['200',{'Content-Type'=>'text/html'},["Helloworld"]]endendrunRackApp.new但是当最后一行更改为使用Rack的内置CGI处理程序时,rackup给出“NoMethodErrorat/undefinedmethod`call'fornil:NilClass”:Rack::Handler::CGI.runRackApp.newRack的其他内置处理程序也提出了同样的反对意见。例如Rack
文章目录一、概述简介原理模块二、配置Mysql使用版本环境要求1.操作系统2.mysql要求三、配置canal-server离线下载在线下载上传解压修改配置单机配置集群配置分库分表配置1.修改全局配置2.实例配置垂直分库水平分库3.修改group-instance.xml4.启动监听四、配置canal-adapter1修改启动配置2配置映射文件3启动ES数据同步查询所有订阅同步数据同步开关启动4.验证五、配置canal-admin一、概述简介canal是Alibaba旗下的一款开源项目,Java开发。基于数据库增量日志解析,提供增量数据订阅&消费。Git地址:https://github.co
我基本上来自Java背景并且努力理解Ruby中的模运算。(5%3)(-5%3)(5%-3)(-5%-3)Java中的上述操作产生,2个-22个-2但在Ruby中,相同的表达式会产生21个-1-2.Ruby在逻辑上有多擅长这个?模块操作在Ruby中是如何实现的?如果将同一个操作定义为一个web服务,两个服务如何匹配逻辑。 最佳答案 在Java中,模运算的结果与被除数的符号相同。在Ruby中,它与除数的符号相同。remainder()在Ruby中与被除数的符号相同。您可能还想引用modulooperation.
RSpec似乎按顺序匹配方法接收的消息。我不确定如何使以下代码工作:allow(a).toreceive(:f)expect(a).toreceive(:f).with(2)a.f(1)a.f(2)a.f(3)我问的原因是a.f的一些调用是由我的代码的上层控制的,所以我不能对这些方法调用添加期望。 最佳答案 RSpecspy是测试这种情况的一种方式。要监视一个方法,用allowstub,除了方法名称之外没有任何约束,调用该方法,然后expect确切的方法调用。例如:allow(a).toreceive(:f)a.f(2)a.f(1)
我对图像处理完全陌生。我对JPEG内部是什么以及它是如何工作一无所知。我想知道,是否可以在某处找到执行以下简单操作的ruby代码:打开jpeg文件。遍历每个像素并将其颜色设置为fx绿色。将结果写入另一个文件。我对如何使用ruby-vips库实现这一点特别感兴趣https://github.com/ender672/ruby-vips我的目标-学习如何使用ruby-vips执行基本的图像处理操作(Gamma校正、亮度、色调……)任何指向比“helloworld”更复杂的工作示例的链接——比如ruby-vips的github页面上的链接,我们将不胜感激!如果有ruby-
A/ctohttp://wiki.nginx.org/CoreModule#usermaster进程曾经以root用户运行,是否可以以不同的用户运行nginxmaster进程? 最佳答案 只需以非root身份运行init脚本(即/etc/init.d/nginxstart),就可以用不同的用户运行nginxmaster进程。如果这真的是你想要做的,你将需要确保日志和pid目录(通常是/var/log/nginx&/var/run/nginx.pid)对该用户是可写的,并且您所有的listen调用都是针对大于1024的端口(因为绑定(
我看到其他人也遇到过类似的问题,但没有一个解决方案对我有用。0.3.14gem与其他gem文件一起存在。我已经完全按照此处指示完成了所有操作:https://github.com/brianmario/mysql2.我仍然得到以下信息。我不知道为什么安装程序指示它找不到include目录,因为我已经检查过它存在。thread.h文件存在,但不在ruby目录中。相反,它在这里:C:\RailsInstaller\DevKit\lib\perl5\5.8\msys\CORE\我正在运行Windows7并尝试在Aptana3中构建我的Rails项目。我的Ruby是1.9.3。$gemin
我有一个super简单的脚本,它几乎包含了FayeWebSocketGitHub页面上用于处理关闭连接的内容:ws=Faye::WebSocket::Client.new(url,nil,:headers=>headers)ws.on:opendo|event|p[:open]#sendpingcommand#sendtestcommand#ws.send({command:'test'}.to_json)endws.on:messagedo|event|#hereistheentrypointfordatacomingfromtheserver.pJSON.parse(event.d
我正在尝试解析网页,但有时会收到404错误。这是我用来获取网页的代码:result=Net::HTTP::getURI.parse(URI.escape(url))如何测试result是否为404错误代码? 最佳答案 像这样重写你的代码:uri=URI.parse(url)result=Net::HTTP.start(uri.host,uri.port){|http|http.get(uri.path)}putsresult.codeputsresult.body这将打印状态码和正文。
有没有办法在sinatra的beforedoblock中停止执行并返回不同的值?beforedo#codeishere#Iwouldliketo'return"Message"'#Iwouldlike"/home"tonotgetcalled.end//restofthecodeget'/home'doend 最佳答案 beforedohalt401,{'Content-Type'=>'text/plain'},'Message!'end如果你愿意,你可以只指定状态,这里有状态、标题和正文的例子