Bug #63721 A problem about varchar type
Submitted: 12 Dec 2011 8:43 Modified: 13 Dec 2011 8:22
Reporter: 心意 舒 Email Updates:
Status: Not a Bug Impact on me:
None 
Category:MySQL Server Severity:S2 (Serious)
Version:5.5.15-log OS:Windows
Assigned to: CPU Architecture:Any
Tags: varchar

[12 Dec 2011 8:43] 心意 舒
Description:
CREATE TABLE `table1` (
  `testname` varchar(20) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8
mysql> insert table1(testname)  values('uioooooooooooooooooooooooooooreqwuiroeuwqrioeuqworueiowqurieouwqrioeuwqirouewqoir');
Query OK, 1 row affected

The insert operation is successful.But the filed of 'testname' is varchar(20).

the length of inserted string greater than 20.

why does this  phenomenon occur?

How to repeat:
CREATE TABLE `table1` (
  `testname` varchar(20) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8
mysql> insert table1(testname)  values('uioooooooooooooooooooooooooooreqwuiroeuwqrioeuqworueiowqurieouwqrioeuwqirouewqoir');
Query OK, 1 row affected

This phenomenon  offen occu!
[12 Dec 2011 9:08] Peter Laursen
Immediately after the INSERT try execute "SHOW WARNINGS;". You will see a warning that data were truncated.  If you don't want this behavior set a 'strict' sql_mode for the connection (like "SET SQL_MODE = 'strict_all_tables';") or start the server in strict mode. Then you will get a plain error and nothing will be inserted.

This is expected behavior with MySQL.

Peter
(not a MySQL person)
[12 Dec 2011 9:26] Valeriy Kravchuk
Please, send the output of:

select @@sql_mode;

Read the manual, http://dev.mysql.com/doc/refman/5.1/en/char.html:

"If strict SQL mode is not enabled and you assign a value to a CHAR or VARCHAR column that exceeds the column's maximum length, the value is truncated to fit and a warning is generated."

I think it explains the result you get.
[13 Dec 2011 8:01] 心意 舒
Thank you for your help!
It's my fault!
I have resolved!
[13 Dec 2011 8:07] 心意 舒
This is not a bug!
Thank you for your answers!