ID: 14013 Updated by: [EMAIL PROTECTED] Reported By: az at i7 dot com dot au Status: Closed Bug Type: OCI8 related Operating System: Linux 2.2, Solaris 2.6 PHP Version: 4.0.6 New Comment:
I'll look into it, but it's not a PHP problem indeed. That's how OCI works. Just don't bind text variables if you don't want to strip trailing spaces. Previous Comments: ------------------------------------------------------------------------ [2004-04-07 08:33:35] m dot ford at lmu dot ac dot uk Thanks, Rasmus -- very informative reference. I see that if you specify your bind variable as external datatype SQLT_CHR, trailing spaces are indeed stripped, so this is presumably what PHP is using at the moment. However, there are other SQLT_ types where this stripping is not performed, and I wonder if there is any chance that one of these could be used instead. In particular, the external datatype SQLT_STR utilizes a C-style null-terminated string -- I don't know enough about PHP internals to know if this would be easy to manage or not, or if there would be a bad performance hit, but as we seem to have a fairly active OCI maintenance team at the moment, perhaps someone could look into it? Cheers! Mike ------------------------------------------------------------------------ [2004-02-02 04:00:50] [EMAIL PROTECTED] Guys, I realize the explanation for the closure wasn't very good, but it is correct. For some reason the underlying Oracle OCI call strips trailing spaces on a bind but not on a regular insert/update on a varchar2 field. You would have to ask Oracle to explain why. Read the VARCHAR2 section of this URL: http://sales.esicom.com/sales/oracle/appdev.816/a76975/oci03typ.htm ------------------------------------------------------------------------ [2003-12-09 12:38:30] russ at iris dot washington dot edu I also wonder why this is closed. Just encountered a simpler case: I cannot select using this field: LOCATION NOT NULL VARCHAR2(2) those records which have ' ' (two spaces) for that LOCATION's value. Non-space values work fine. Interactive SQLPLUS confirms those rows do exist. Oracle 8 PHP 4.3.1 Solaris SunOS dmc 5.7 sun4u sparc SUNW,Ultra-Enterprise ------------------------------------------------------------------------ [2003-08-18 11:52:36] m dot ford at lmu dot ac dot uk My mistake -- it's Closed, not Open ("green means Closed, green means Closed!"), but, to my mind, still without satisfactory explanation. Cheers! ------------------------------------------------------------------------ [2003-08-18 11:49:55] m dot ford at lmu dot ac dot uk There still doesn't seem to be a satisfactory explanation posted here, and it's still Open, so could someone please address the salient issue: If the database column is defined as VARCHAR2, why does this strip trailing blanks on the inserted value: $text = " this line has spaces "; $st = ociparse($db, "insert into test values (:text)"); ocibindbyname($st, ":text", &$text, 2000); ociexecute($st); whilst this does not: $text = " this line has spaces "; $st = ociparse($db, "insert into test values '$text')"); ociexecute($st); ------------------------------------------------------------------------ The remainder of the comments for this report are too long. To view the rest of the comments, please view the bug report online at http://bugs.php.net/14013 -- Edit this bug report at http://bugs.php.net/?id=14013&edit=1