首页 > 解决方案 > Data too long db2 中 Varchar(600) 类型列的错误(Windows 和 10.0.22 版本)

问题描述

我设置了大小为 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;

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

标签: db2db2-luw

解决方案


快速测试:

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 字符“±”(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 文件导入古吉拉特语数据时,时间数据显示如下? (那里没有特定的 Db2,只是常规的“utf-8 故障排除”)


推荐阅读