我有一个存储 MD5 哈希的索引列。因此,该列将始终存储 32 个字符的值。无论出于何种原因,它都是作为 varchar 而不是 char 创建的。迁移数据库以将其转换为字符是否值得?这是在带有 InnoDB 的 MySQL 5.0 中。
目前在我们的 SQL Server 2012 数据库中,我们正在使用varchar,我们想改变它nvarchar。我已经生成了一个脚本来做到这一点。
我的问题是 SQL Server 写入varchar列的方式与写入列的方式有什么不同吗?nvarchar列的吗?我们有一些我很关心的后端程序。
编辑:
不确定这是否有帮助,但这些列没有索引、f/k 或约束。
在 MySQL 中 varchar 大小之间是否存在性能差异?例如,varchar(25)和varchar(64000)。如果没有,是否有理由不声明所有具有最大大小的 varchars 以确保您不会用完空间?
根据PostgreSQL 的文档,VARCHAR,VARCHAR(n)和之间没有性能差异TEXT。
我应该为名称或地址列添加任意长度限制吗?
编辑:不是欺骗:
我知道这种CHAR类型是过去的遗物,我不仅对性能感兴趣,而且对其他优缺点感兴趣,例如 Erwin 在他惊人的回答中所述。
我在MySql 数据库中工作,有一个这样的表:
+--------------+
| table_name |
+--------------+
| myField |
+--------------+
Run Code Online (Sandbox Code Playgroud)
...我需要进行很多这样的查询(列表中有 5-10 个字符串):
SELECT myField FROM table_name
WHERE myField IN ('something', 'other stuff', 'some other a bit longer'...)
Run Code Online (Sandbox Code Playgroud)
将有大约 24.000.000 个唯一行
1)我应该使用FULLTEXTor 和INDEXkeyVARCHAR(150)吗?
2)如果我将字符从 150 增加到 220 或 250 ......会产生很大的不同吗?(有没有办法计算它?)
3)正如我所说,它们将是唯一的,所以myField应该是一个PRIMARY KEY。向已经是 VARCHAR INDEX/FULLTEXT 的字段添加 PRIMARY KEY 是不是很少见?
请您告诉我,我什么时候应该在 Transact-SQL 查询中的字符串前使用 N 前缀?我已经开始使用一个数据库,使用这样的查询我没有得到任何结果
SELECT * FROM a_table WHERE a_field LIKE '%?_pattern%'
Run Code Online (Sandbox Code Playgroud)
直到我将模式更改为N'%?_pattern%'. 过去我从来没有添加过这个前缀,所以我很好奇。a_field被定义为nvarchar(255),但我认为原因是别的。
postgresql 中各种数据类型的大小限制是多少?我在某处看到 for character varying(n),varchar(n) n必须在 1 到 10485760 之间。这是真的吗?
什么是有效的尺寸character(n),char(n)和text?
我有一个旧模式(免责声明!),它使用基于哈希生成的 id 作为所有表的主键(有很多)。这种 id 的一个例子是:
922475bb-ad93-43ee-9487-d2671b886479
Run Code Online (Sandbox Code Playgroud)
改变这种方法是不可能的,但是索引访问的性能很差。撇开这可能的无数原因不谈,我注意到有一件事似乎不太理想 - 尽管所有许多表中的所有 id 值的长度都正好是 36 个字符,但列类型是varchar(36),而不是 char(36)。
将列类型更改为固定长度是否会char(36)提供任何显着的索引性能优势,除了每个索引页的条目数量增加很小等之外?
即在处理固定长度类型时 postgres 的执行速度是否比处理可变长度类型快得多?
请不要提及微小的存储节省 - 与对列进行更改所需的手术相比,这无关紧要。
我有一个字段来存储一些数据,该字段声明为varchar(max). 据我所知,这应该是存储2^31 - 1字符,但是当我输入超过 8000 个字符的内容时,它会切断其余部分。
我已经验证所有数据都包含在我的更新语句中,并且查询在其他地方看起来都很好,但是当我选择数据时,它已被切断。
当我在我的网站上显示数据以及使用 SSMS 到select content from table.
select DATALENGTH (content) from table 返回 8000。
我使用这个设置数据:update table set content = 'my long content' where id = 1。内容确实有很多 HTML,但我看不出这会导致问题。我唯一能看到的是我正在做的事情是替换所有内容",''因为这是用户输入的内容(不记得我现在为什么这样做了)。
我确实通过删除内容中的所有单引号设法使内容正确输入,所以我认为我的数据而不是数据库发生了一些奇怪的事情。
我应该对查询做一些特别的事情来使用一个varchar(max)字段吗?
使用:SQL Server 2008 (10.50) 64 位。
我有一个带有字符串列的表和一个检查具有特定长度的行的谓词。在 SQL Server 2014 中,无论我检查的长度如何,我都会看到估计为 1 行。这产生了非常糟糕的计划,因为实际上有数千甚至数百万行,而 SQL Server 选择将此表放在嵌套循环的外侧。
对于 SQL Server 2014 的基数估计为 1.0003 而 SQL Server 2012 估计为 31,622 行,是否有解释?有没有好的解决方法?
以下是该问题的简短再现:
-- Create a table with 1MM rows of dummy data
CREATE TABLE #customers (cust_nbr VARCHAR(10) NOT NULL)
GO
INSERT INTO #customers WITH (TABLOCK) (cust_nbr)
SELECT TOP 1000000
CONVERT(VARCHAR(10),
ROW_NUMBER() OVER (ORDER BY (SELECT NULL))) AS cust_nbr
FROM master..spt_values v1
CROSS JOIN master..spt_values v2
GO
-- Looking for string of a certain length.
-- While both CEs …Run Code Online (Sandbox Code Playgroud) sql-server varchar functions sql-server-2014 cardinality-estimates
varchar ×10
performance ×4
sql-server ×4
mysql ×3
postgresql ×3
datatypes ×2
index ×2
functions ×1
innodb ×1