Access文本字段上的唯一索引是否始终不区分大小写?

时间:2010-11-29 16:23:10

标签: delphi ms-access indexing

我使用以下代码创建了MS Access表:

  tbl := Database.CreateTableDef('English', 0, '', '');
  try
    fld := tbl.CreateField('ID', dbLong, 0);
    fld.Attributes := dbAutoIncrField + dbFixedField;
    tbl.Fields.Append(fld);

    fld := tbl.CreateField('Content', dbText, 255);
    fld.Required := true;
    fld.AllowZeroLength := false;
    tbl.Fields.Append(fld);

    Database.TableDefs.Append(tbl);

    idx := tbl.CreateIndex('PrimaryKey');
    idx.Fields.Append(idx.CreateField('ID', EmptyParam, EmptyParam));
    idx.Primary := True;
    idx.Unique := true;
    tbl.Indexes.Append(idx);

    idx := tbl.CreateIndex('IX_Content');
    idx.Fields.Append(idx.CreateField('Content', EmptyParam, EmptyParam));
    idx.Primary := false;
    idx.Unique := true;
    tbl.Indexes.Append(idx);
  finally
    tbl := nil;
  end;

这很好用,直到我尝试将两个字符串'Field type'和'Field Type'插入到此表中。我收到一个错误,告诉我唯一的索引限制我这样做。正如您所看到的,它们仅在第二个单词的情况下有所不同。由于我没有明确地使索引不敏感(我甚至不知道如何做),我不太明白为什么会发生这种情况。文本字段中的索引在MS Access中是否始终不区分大小写?如果没有,我做错了什么?

2 个答案:

答案 0 :(得分:5)

Access Jet数据库从根本上说不区分大小写。那是你的问题。据我所知,没有办法使Access索引区分大小写。

答案 1 :(得分:0)

使用二进制字段

Microsoft Access中的案例敏感性问题早在很久以前就由Microsoft和still can be found in Web archive发表的文章 KB244693 中得到解决。

基本上,解决方案是在您的MS Access表中添加一个Binary字段,并且该字段最终区分大小写(使用Unicode来存储二进制内容),并且仍可以与运算符=一起用作文本字段, LIKE

不能通过UI添加Binary类型的字段,但是您可以使用如下SQL语句将其添加到现有表中:

ALTER TABLE Table1
  ADD COLUMN BinaryField1 BINARY(50)

然后,您可以通过Access UI正常管理它。