yii2+oracle 文章写入 [ 2.0 版本 ]
在oracle中字段类型为varchar2(4000)写入数据没有超出上限
插入测试数据11122223333不长的不会报错,内容长了之后会报错 仅能绑定要插入 LONG 列的 LONG 值
最佳答案
-
这个是错误属于oracle的错误,实际上,你的长度确实超过了其能保存的长度
你的数据库字符集可能是UTF-8的,对于UTF-8或欧洲的某些字符集,oracle在存储时,对于一个字符需要2个或3个字节的存储空间,虽然表定义中为varchar2(4000),但是其实该字段的data_length为其2倍或3倍长。这种情况下oracle会把data_length长度超过4000的当做LONG型处理,所以报错。你可以这样测试这个问题:
你说,插入测试数据11122223333不长的不会报错,内容长了之后会报错,你插入,4000/2-1的长度的字符串,看看会不会报错,然后,看看4000/2的字符串长度会不会报错,如果报错,再看看4000/3-1长度的字符串会不会报错,再看看4000/3的长度会不会报错还有就是,明确指定绑定VARCHAR处理:参考php的文档:
http://php.net/manual/zh/function.oci-bind-by-name.php#92334//To avoid this error make sure you specify lengths when binding varchars e.g. <?php oci_bind_by_name($stmt,':string',$string, 256); ?> //And for numerics use the default length (-1) but tell oracle its an integer e.g. <?php oci_bind_by_name($stmt,':num',$num, -1, SQLT_INT); ?>
先尝试下吧
共 1 条回复
Sor
注册时间:2016-03-20
最后登录:2017-03-06
在线时长:2小时7分
最后登录:2017-03-06
在线时长:2小时7分
- 粉丝0
- 金钱55
- 威望10
- 积分175