数据太长db2(Windows和10.0.22版本)中Varchar(600)类型列的错误



我设置了一个大小为600的Varchar类型的列大小。但我在更新表格时出现了以下错误。

[Code: -404, SQL State: 22001]  THE SQL STATEMENT SPECIFIES A STRING THAT IS TOO LONG. SQLCODE=-404, SQLSTATE=22001, DRIVER=4.25.1301

我正在使用一个更新查询,如下所示。

update test set description= <here i am passing the description of charachters length 600> where id=1;

如果我通过了字符计数597个字符的描述,则不会出现上述指定的错误。但是,如果字符计数大于597,则会出现错误,即使我将列大小设置为600也是如此。对此有什么具体的解释吗?

快速测试:

db2 "create table varchar_test(c1 int, c2 varchar(10))"
db2 "insert into varchar_test values (1, '0123456789')"
DB20000I  The SQL command completed successfully.

很明显,我可以在这里插入10字节的字符串。但是,如果我将最后一个字符替换为多字节UTF字符"brow"(UTF-8中的2个字节(,它将失败:

db2 "insert into varchar_test values (2, '012345678ą')"
DB21034E  The command was processed as an SQL statement because it was not a 
valid Command Line Processor command.  During SQL processing it returned:
SQL0433N  Value "012345678ą" is too long.  SQLSTATE=22001

少一个就可以了:

db2 "insert into varchar_test values (2, '01234567ą')"
DB20000I  The SQL command completed successfully.

所以我现在可以测试:

db2 "select c1, length(c2) c2_len_bytes,CHARACTER_LENGTH(c2) c2_char_len, hex(c2) c2_hex from varchar_test" 
C1          C2_LEN_BYTES C2_CHAR_LEN C2_HEX              
----------- ------------ ----------- --------------------
1           10          10 30313233343536373839
2           10           9 3031323334353637C485

->它确认第二行的大小是10个字节,但具有9个字符。我建议对可以容纳的最长字符串重复同样的练习,看看VARCHAR中是否确实只有单字节字符。要想更详细地检查Db2数据库中的utf-8字符,你可以在这里查看我的答案:当我使用csv文件导入gujarati数据时,时间数据显示为?(没有Db2的具体内容,只是一个常规的"utf-8故障排除"(

最新更新