db2 - 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。对此有什么具体解释吗?
解决方案
快速测试:
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 故障排除”)
推荐阅读
- next.js - how to setup antd less support with nextjs 12
- paypal - Paypal 商店链接序列
- autodesk-forge - Autodesk Forge 数据管理 API。搜索请求过多
- java - 如何更新 .ear 文件中的 .jar 文件并使用 bash 脚本保存 .ear 文件
- html - 手风琴 - 不可点击的按钮
- json - 使用正则表达式提取两个字符之间的文本字符串
- python - 用于从列中复制特定项目的 Pandas 方法
- php - 如何避免andFilterWhere函数中PHP Yii2框架的Sql注入
- r - 通过子组迭代获取 lm 系数,并在每次迭代 R
- javascript - 等待 API 调用结果并更新列表组件