我们有一个数据库表,有大约200,000条记录.其中包括3个ntext列,其中包含长度为4000-70000的字符串数据.但桌面上的一个选择只需要1分钟以上的时间来返回数据.甚至使用where条件和索引来为条件选择12000条记录需要40秒.
所以我们决定将这些数据类型更改为nvarchar(max),但仍然没有注意到主要区别,因为它会将数据存储在行之外,因为它太长了.有什么更好的方法可以提高我的表的性能?
我正在尝试将varchar mm/dd/yyyy数据转换/转换为datetime mm/dd/yyyy格式,以便我可以使用between子句查询范围.
我之前看过一个类似的问题,但没有大肆宣传,我不知道如何解决这个问题.
正如标题所说,我创建了一个表,其中一列是varchar(50)类型,但它拒绝INSERT语句,其中第一个值是字符串:
表创建:
CREATE TABLE Fiddy(Lname varchar(50),
-> Height int,
-> Width int,
-> Gas int);
Run Code Online (Sandbox Code Playgroud)
插入尝试
insert into Fiddy VALUES(Smith, 54, 43, 1);
ERROR 1054 (42S22): Unknown column 'Smith' in 'field list'
Run Code Online (Sandbox Code Playgroud)
插入尝试
insert into Fiddy values (4, 5, 5, 6);
Query OK, 1 row affected (0.00 sec)
Run Code Online (Sandbox Code Playgroud)
选择*
select * from Fiddy;
+-------+--------+-------+------+
| Lname | Height | Width | Gas |
+-------+--------+-------+------+
| 4 | 5 | 5 | 6 |
+-------+--------+-------+------+
1 row in set (0.00 sec)
Run Code Online (Sandbox Code Playgroud) 我正在尝试打印动态查询,但正在发生的是打印查询时字符被截断.
declare @sql varchar(max)
set @sql = cast('select*from.................length is huge' as varchar(max))
print @sql
Run Code Online (Sandbox Code Playgroud)
知道怎么解决吗?
MySQL中的varchar/text/longtext列是否占用文件系统中的全长大小,即使是不完整的单元格?
以博客文章为例,我有以下几列,并在其中添加了一个给定的字符串.
CHAR (72) - can store upto 72 characters - i put in a string "abcd"
VARCHAR (72) - can store upto 72 characters - i put in a string "abcd"
TINYTEXT - can store upto 255 characters - i put in a string "abcd"
TEXT - can store upto 65,535 characters - i put in a string "abcd"
LONGTEXT - can store upto 4,294,967,295 characters - i put in a string "abcd"
Run Code Online (Sandbox Code Playgroud)
一行中每列的实际物理空间占用多少?
每列能够存储的完整大小?
或者只有存储"abcd"所需的数量?
我在表中有一个varchar(12)字段,但该字段中的数据是日期 - 2016年1月1日(我有大约5,000个日期).我一直试图做一个ORDER BY但它似乎没有按日期排序.如果它不是DateTIME字段,我将如何在该字段上进行ORDER BY?
我有一个表,我填充了来自文件的制表符分隔数据,这些数据的编码似乎不是utf-8,如下所示:
CREATE TABLE tab (
url varchar(2000),
...
);
COPY tab
FROM 's3://input.tsv'
Run Code Online (Sandbox Code Playgroud)
复制完成后,我运行
SELECT
MAX(LEN(url))
FROM tab
Run Code Online (Sandbox Code Playgroud)
返回1525.我想,因为我在浪费空间,所以我可以通过使用varchar(2000)而不是将列重新调整大约四分之一varchar(1525).但是既不重做COPY也不重新设置新表并插入已导入的数据.在这两种情况下,我得到
error: Value too long for character type
Run Code Online (Sandbox Code Playgroud)
为什么列不能保存这些值?
我想显示数据类型为datetimeas的列varchar。但我不需要显示时间。这是我目前使用的
SELECT
CONVERT(varchar(50), CONVERT(date, [Date_Created])) AS 'Date_Created'
FROM
Accounts_Table
Run Code Online (Sandbox Code Playgroud)
这样做是否有更高的效率或更少的 CPU 扩展?
我有用于将记录插入SQL Server表的代码,在某些情况下,它有一些空值(如果没有首先用伪null(空)val替换).具体来说,它们是varchars.
如果我不检查null并在这些实例中分配string.empty:
if (null == _PatternOrdinal)
{
rs.PatternOrdinal = string.Empty;
}
else
{
rs.PatternOrdinal = _PatternOrdinal;
}
Run Code Online (Sandbox Code Playgroud)
...它抛出异常," 参数化查询"(@Unit varchar(25),@ ReportID int,@ NextExecution datetime,@ NextEx'需要参数'@PatternOrdinal',这是未提供的. "
IOW,如果代码只是这样:
rs.PatternOrdinal = _PatternOrdinal;
Run Code Online (Sandbox Code Playgroud)
...而不是上面的if块,它崩溃了.
所以我必须用几个参数做到这一点.是否有一种不那么冗长的方法来规避这种周期性的脱轨?
我正在编写一份报告,以显示客户在家中建设时需要的功能.我想离开连接2个表但数据的存储方式使我很难进行连接.
表1 tbl_Main_Holding有一个名为Requirements的字段,数据存储为varchar,可以有多个值,如1,4,7
1 = "Eco-Build"
4 = "Conservatory"
7 = "Basement"
Run Code Online (Sandbox Code Playgroud)
表2 [tbl_Features]具有字段ID(INT)和描述(Varchar)
SELECT * FROM dbo.tbl_Main_Holding AS rm
LEFT JOIN [dbo].[tbl_Features] AS f
ON rm.Requirements = f.id
Run Code Online (Sandbox Code Playgroud)
下面的连接不会工作,因为我需要将varchar转换为INT但是这不是我的问题我的问题是我如何显示已选择多个功能的客户端的结果,这个离开加入如何工作?我使用SQL Server 2008,两个表的数据都存储起来.

我想创建一个查询来验证一列,以便它只允许三种不同的条目类型,即名为“问候”的表的“hello”、“hi”或“hey”,并防止输入任何其他文本。如果此方法不可行,是否有办法使其在输入任何其他文本(如“good day”)时变为“错误”
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
public class MainActivity extends AppCompatActivity {
SQLiteDatabase db;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
db = this.openOrCreateDatabase("Practice", MODE_PRIVATE, null);
db.execSQL("CREATE TABLE IF NOT EXISTS blah (subjects VARCHAR, notes VARCHAR, amount VARCHAR");
}
Run Code Online (Sandbox Code Playgroud)
错误日志:
E/SQLiteLog:(1)在"VARCHAR"附近:语法错误06-30 23:46:21.834 11420-11420/com.asd.sqltesting D/AndroidRuntime:关闭VM 06-30 23:46:21.835 11420-11420/com.asd.sqltesting E/AndroidRuntime:FATAL EXCEPTION:main进程:com.asd.sqltesting,PID:11420 java.lang.RuntimeException:无法启动活动ComponentInfo {com.asd.sqltesting/com.asd.sqltesting.MainActivity} :android.database.sqlite.SQLiteException:near"VARCHAR":语法错误(代码1):,同时编译:CREATE TABLE IF NOT EXISTS blah(subject VARCHAR,notes VARCHAR,amount VARCHAR at android.app.ActivityThread.performLaunchActivity(ActivityThread) .java:2298)在Android.app.ActivityThread.access $ 800(ActivityThread.java:144)的android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2360)android.app.ActivityThread $ H.handleMessage(ActivityThread.java) :1278)android.app.Handler.dispatchMessage(Handler.java:102)android.app.Looper.loop(Looper.java:135)android.app.ActivityThread.main(ActivityThre)ad.java:5221)at java.lang.reflect.Method.invoke(Native Method)at java.lang.reflect.Method.invoke(Method.java:372)at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.运行(ZygoteInit.java:899)com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)引起:android.database.sqlite.SQLiteException:near"VARCHAR":语法错误(代码1): ,同时编译:CREATE TABLE IF NOT EXISTS …
使用VS 2013,我试图创建一个简单的C++程序,VARCHAR将无法正常工作.我已经尝试将变量声明为VARCHAR许多不同的方式,并且它总是无效的.我使用了所有这些包括:
#include "windows.h"
#include "string.h"
#include "stdlib.h"
#include "stdio.h"
#include "direct.h"
#include "stdafx.h"
Run Code Online (Sandbox Code Playgroud)
但是我仍然在这一行上出错:
EXEC SQL BEGIN DECLARE SECTION;
VARCHAR emp_name[10];
EXEC SQL END DECLARE SECTION;
Intellisense: identifier "VARCHAR" is undefined.
Run Code Online (Sandbox Code Playgroud)
我在Visual Studio 6.0中编写了C++,所以我不是C的假人,只是Visual Studio 2013.请指教.