SET TERM ^;
SET SQL DIALECT 3^
SET NAMES WIN1251^
SET CLIENTLIB 'fbclient.dll'^
CREATE DATABASE '127.0.0.1:test.fdb'
USER 'SYSDBA' PASSWORD 'masterkey'
PAGE_SIZE 16384
DEFAULT CHARACTER SET WIN1251^
CREATE TABLE TABLE_1 (
ID INTEGER NOT NULL,
NAME VARCHAR(127) COLLATE PXW_CYRL NOT NULL
)^
CREATE INDEX IDX1 ON TABLE_1 (NAME)^
在最后一个命令中,我收到一个错误:
没有为系统表定义此操作。元数据更新不成功。索引 IDX1 的密钥大小太大。
为什么会这样?Firebird 1 和 1.5 的索引限制为 252 字节。使用一字节字符集。为什么 127 个字符不能放入 252 个字节?
在 PXW_CYRL 顺序中,不同的寄存器具有相同的权重。
西里尔字母的字母顺序如下所示:aAbBvVgGdD...yaYa
COLLATE WIN1251 使用 1 个字节来表示一个字符及其指数,但在 PWX_CYRL 中它是 3 个字节。
也许在 NAME 字段中将 COLLATE 更改为 WIN1251 会有所帮助