Bug #6999 Traditional: Wrong SQLSTATE returned for string truncation
Submitted: 3 Dec 2004 23:15 Modified: 11 Mar 2005 16:45
Reporter: Trudy Pelzer Email Updates:
Status: Closed Impact on me:
Category:MySQL Server Severity:S3 (Non-critical)
Version:5.0.3-alpha-debug OS:Linux (SuSE 9.1)
Assigned to: Ramil Kalimullin CPU Architecture:Any

[3 Dec 2004 23:15] Trudy Pelzer
Under sql_mode='traditional', too-long strings that 
are assigned to a CHAR/VARCHAR field must be 
rejected, with SQLSTATE 22001 "String data, right truncation". 
MySQL is correctly rejecting such assignments, 
but is returning the wrong SQLSTATE: 01000, 
which just means "warning" rather than "error". 

How to repeat:
mysql> set sql_mode='traditional'; 
mysql> create table t1 (col1 char(5)); 
mysql> insert into t1 (col1) values ('hellobob'); 
ERROR 1265 (01000): Data truncated for column 'col1' at row 1 
-- The action (rejection of INSERT) is correct, but the 
SQLSTATE must be 22001, which means "I've rejected 
this INSERT because there's an error". SQLSTATE 01000 
just means "Warning: I've allowed this INSERT even 
though the string was too long". 
mysql> select * from t1; 
Empty set (0.00 sec)
[14 Feb 2005 4:57] Alexander Barkov
Ramil, Trudy,

what should happen on multiple inserts, with say
three values:

INSERT INTO varchar_3_column VALUES ('ok1'), ('too-long1'),('ok2');

I.e. the first and the last values fit into the column. Then second does not fit.
Which of them should be returned by a SELECT query afterwards?

Ramil, whatever happens, I suggest to cover this situation in the test.
As well as add a SELECT query after UPDATEs producing the error.

The patch looks fine for me. I vote OK to push after extending the test.
[1 Mar 2005 12:08] Ramil Kalimullin
fixed in 5.0.3
[11 Mar 2005 16:45] Paul Dubois
Noted in 5.0.3 changelog.