Bug #26359 Strings becoming truncated and converted to numbers under STRICT mode

Submitted: 14 Feb 2007 8:55 Modified: 10 Apr 2007 18:15
Reporter: Tobias Asplund Email Updates:
Status: Closed Impact on me:
None 
Category:MySQL Server: Data Types Severity:S2 (Serious)
Version:5.0.36-BK, 5.0.33 OS:Linux (Linux, Mac OS X)
Assigned to: Ramil Kalimullin CPU Architecture:Any
Tags: 5.0.18, regression

[14 Feb 2007 8:55] Tobias Asplund
Description:
In earlier releases of 5.0 (5.0.13 and 5.0.18 tested) a string inserted into an integer column would truncate in non-strict mode and give an error in strict mode.
Somewhere along the way this disappeared.

mysql> CREATE TABLE bugtest ( a INT );
Query OK, 0 rows affected (0.28 sec)

mysql> SET sql_mode = 'STRICT_ALL_TABLES';
Query OK, 0 rows affected (0.00 sec)

mysql> INSERT INTO bugtest VALUES ('-');
Query OK, 1 row affected (0.07 sec)

How to repeat:
CREATE TABLE bugtest ( a INT );
SET sql_mode = 'STRICT_ALL_TABLES';
INSERT INTO bugtest VALUES ('-');
DROP TABLE bugtest;
[14 Feb 2007 9:30] Valeriy Kravchuk
Thank you for a bug report. Verified just as described with latest 5.0.36-BK on Linux:

openxs@suse:~/dbs/5.0> bin/mysql -uroot test
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 1
Server version: 5.0.36 Source distribution

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql> CREATE TABLE bugtest ( a INT );
SEQuery OK, 0 rows affected (0.01 sec)

mysql> SET sql_mode = 'STRICT_ALL_TABLES';
Query OK, 0 rows affected (0.00 sec)

mysql> INSERT INTO bugtest VALUES ('-');
DQuery OK, 1 row affected (0.00 sec)
[27 Feb 2007 21:31] Konstantin Osipov
Assigning to maintenance for investigation. Please assign back to runtime if find complex.
[16 Mar 2007 8:18] Ramil Kalimullin
A patch for this bug has been committed. After review, it may
be pushed to the relevant source trees for release in the next
version. You can access the patch from:

http://lists.mysql.com/commits/22095
[26 Mar 2007 6:22] Alexander Barkov
The patch http://lists.mysql.com/commits/22095  is ok to push.

I only found a very small thing, which is not harmful GCC,
but other compilers will likely generate warnings. In this
piece of code:

+bool Field_num::get_int(CHARSET_INFO *cs, const char *from, uint len,
+                        longlong *rnd, ulonglong unsigned_max, 
+                        longlong signed_min, longlong signed_max)
+{
+  char *end;
+  int error;
+  
+  *rnd= cs->cset->strntoull10rnd(cs, from, len, unsigned_flag, &end,

The "rnd" variable is a pointer to "longlong" type,
while strntoull10rnd() return type is "ulonglong".
Adding an implicit cast should make the code safe
against warnings:

  *rnd= (longlong) cs->cset->strntoull10rnd(cs, from, len, unsigned_flag, &end,
[10 Apr 2007 16:06] Timothy Smith
Pushed, for 5.0.40 and 5.1.18-beta
[10 Apr 2007 18:15] Paul DuBois
Noted in 5.0.40, 5.1.18 changelogs.

String truncation upon insertion into a integer column did not
generate a warning (or an error in strict mode).

Portions of this website are copyright © 2001, 2002 The PHP Group

Page generated in 0.058 sec. using MySQL 8.4.7-u6-cloud

Timestamp references displayed by the system are UTC.
Content reproduced on this site is the property of the respective copyright holders.
It is not reviewed in advance by Oracle and does not necessarily represent the opinion of Oracle or any other party.