Sor

Sor

这家伙有点懒,还没写个性签名!

  • 财富值55
  • 威望值10
  • 总积分175

个人信息

  • 2016-10-08 已签到
    连续签到1天,获得了5个金钱
  • 2016-04-14 已签到
    连续签到1天,获得了5个金钱
  • 2016-04-05 已签到
    连续签到1天,获得了5个金钱
  • 2016-03-25 已签到
    连续签到2天,获得了10个金钱
  • 2016-03-24 已签到
    连续签到1天,获得了5个金钱
  • 回复了 的回答

    这个是错误属于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);
    ?>
    

    先尝试下吧

    在此感谢你的回答,也许的确是超出了长度 我的解决办法是数据库中更换clob类型存储,使用PDO来操作数据

  • 提出了问题
    yii2+oracle 文章写入
  • 回复了 的回答

    $_GET数组中没有xp这个键 你使用了当然会有警告

    yii2 应该也是捕获php的错误,也是根据php.ini来定的

  • 2016-03-22 已签到
    连续签到1天,获得了5个金钱
  • 回答了问题 $_GET['test']会报错

    $_GET数组中没有xp这个键 你使用了当然会有警告

助理 等级规则
175/200
资料完整度
20/100
用户活跃度
0/100

Ta的关注

1

Ta的粉丝

0

Ta的访客

1