Sor
- Sor 2016-10-08 已签到连续签到1天,获得了5个金钱
- Sor 2016-04-14 已签到连续签到1天,获得了5个金钱
- Sor 2016-04-05 已签到连续签到1天,获得了5个金钱
- Sor 2016-03-25 已签到连续签到2天,获得了10个金钱
- Sor 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来操作数据
- Sor 提出了问题yii2+oracle 文章写入
- Sor 2016-03-22 已签到连续签到1天,获得了5个金钱
- Sor 回答了问题 $_GET['test']会报错
$_GET数组中没有xp这个键 你使用了当然会有警告