SQLA で 86 列からなるテーブルからすべての列を選択すると、常にエラーが発生しますRow size or Sort Key size overflow
。このエラーを回避する唯一の方法は、select の列数を減らすことですが、これは型にはまらない解決策です。1 つの select ステートメントで、このテーブルからすべての列を選択する方法が必要です。
バウンティ
この懸賞金を追加するのは、これ以上この問題をハッキングすることができないためです。これには解決策が必要です。現在、Unicode 列を含むテーブルから選択しています。これにより、行サイズが容量を超えていると想定しています。Session Character Set=UTF8
接続文字列から削除すると、エラーが発生しますThe string contains an untranslatable character
。NET データ プロバイダー 14.0.0.1 を使用しています。サイズを大きくする方法はありますか?
アップデート
ロブ、あなたは感銘を与えることは決してありません! UTF16 を使用するという提案が機能します。ODBC設定を更新した後、SQLAでも機能します。私の問題は、ASCII、Latin、UTF8、および UTF16 を理解していないことだと思います。
また、すべてラテン語の列で構成される 80 列のテーブルもあり、そのうちのいくつかは「varchar(1000)」です。UTF8 および UTF16 で SQLA から選択すると同じエラーが発生しますが、ODBC 構成で文字セットを ASCII またはラテン モードに更新した後、問題なく選択できます。
ロブ、ここで何が起こっているかについての洞察を提供できますか? varchar(1000)
私の理論では、これはラテン語セットに含まれているため、UTF8 または UTF16 を使用すると、より大きなバイト セットに変換され、特に's の場合にエラーが発生します。セッション文字セットとしてラテン語を使用すると、変換は行われず、ネイティブ エンコーディングで文字列が取得されます。問題のエンコーディングは「ダウングレード」できないため、UTF8 は失敗しますか?
リクエストごとに、問題のテーブルの DDL は次のとおりです。
CREATE MULTISET TABLE mydb.mytable ,NO FALLBACK ,
NO BEFORE JOURNAL,
NO AFTER JOURNAL,
CHECKSUM = DEFAULT,
DEFAULT MERGEBLOCKRATIO
(
FIELD1 VARCHAR(214) CHARACTER SET LATIN CASESPECIFIC NOT NULL,
FIELD2 VARCHAR(30) CHARACTER SET UNICODE CASESPECIFIC,
FIELD3 VARCHAR(60) CHARACTER SET UNICODE CASESPECIFIC NOT NULL,
FIELD4 VARCHAR(4000) CHARACTER SET UNICODE CASESPECIFIC,
FIELD5 VARCHAR(900) CHARACTER SET UNICODE CASESPECIFIC,
FIELD6 VARCHAR(900) CHARACTER SET UNICODE CASESPECIFIC,
FIELD7 VARCHAR(900) CHARACTER SET UNICODE CASESPECIFIC,
FIELD8 VARCHAR(900) CHARACTER SET UNICODE CASESPECIFIC,
FIELD9 VARCHAR(900) CHARACTER SET UNICODE CASESPECIFIC,
FIELD10 VARCHAR(900) CHARACTER SET UNICODE CASESPECIFIC,
FIELD11 VARCHAR(3600) CHARACTER SET UNICODE CASESPECIFIC,
FIELD12 VARCHAR(3600) CHARACTER SET UNICODE CASESPECIFIC,
FIELD13 VARCHAR(3600) CHARACTER SET UNICODE CASESPECIFIC,
FIELD14 VARCHAR(3600) CHARACTER SET UNICODE CASESPECIFIC)
PRIMARY INDEX ( FIELD1 );