Bug #26491 False 'data truncated' warnings, inserting Unicode data into 8-bit TEXT fields
Submitted: 20 Feb 2007 9:56 Modified: 12 Mar 2007 10:01
Reporter: Domas Mituzas Email Updates:
Status: Duplicate Impact on me:
None 
Category:MySQL Server: Charsets Severity:S2 (Serious)
Version:5.0-bk, 5.1-bk OS:
Assigned to: Assigned Account CPU Architecture:Any
Tags: bfsm_2007_03_01, character sets, Unicode, warnings

[20 Feb 2007 9:56] Domas Mituzas
Description:
When Unicode data is inserted into 8-bit character set fields (latin1 and cp1257 tested), warning "Data truncated for column 'a' at row 1" is shown, though the data is inserted correctly.

This happens just with *TEXT fields, VARCHAR or CHAR types are not affected.

How to repeat:
mysql> set names utf8;
Query OK, 0 rows affected (0.00 sec)
mysql> show variables like '%char%';
+--------------------------+--------------------------------------------+
| Variable_name            | Value                                      |
+--------------------------+--------------------------------------------+
| character_set_client     | utf8                                       | 
| character_set_connection | utf8                                       | 
| character_set_database   | latin1                                     | 
| character_set_filesystem | binary                                     | 
| character_set_results    | utf8                                       | 
| character_set_server     | latin1                                     | 
| character_set_system     | utf8                                       | 
| character_sets_dir       | /usr/local/mysql-5.0/share/mysql/charsets/ | 
+--------------------------+--------------------------------------------+
8 rows in set (0.00 sec)

mysql> CREATE TABLE `german` (
    ->   `a` text collate latin1_german2_ci
    -> ) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_german2_ci
    -> ;
Query OK, 0 rows affected (0.00 sec)

mysql> insert into german values ('ä'),('aaä'),('aa');
Query OK, 3 rows affected, 2 warnings (0.00 sec)
Records: 3  Duplicates: 0  Warnings: 2

mysql> show warnings;
+---------+------+----------------------------------------+
| Level   | Code | Message                                |
+---------+------+----------------------------------------+
| Warning | 1265 | Data truncated for column 'a' at row 1 | 
| Warning | 1265 | Data truncated for column 'a' at row 2 | 
+---------+------+----------------------------------------+
2 rows in set (0.00 sec)

mysql> select * from german;
+------+
| a    |
+------+
| ä   | 
| aaä | 
| aa   | 
+------+
3 rows in set (0.00 sec)

mysql> create table lithuanian (a text) charset=cp1257;
Query OK, 0 rows affected (0.02 sec)

mysql> insert into lithuanian values ('ą');
Query OK, 1 row affected, 1 warning (0.00 sec)

mysql> select * from lithuanian;
+------+
| a    |
+------+
| ą   | 
+------+
1 row in set (0.00 sec)

Suggested fix:
don't print warnings, if data was not actually truncated
[20 Feb 2007 10:00] Domas Mituzas
In strict SQL_MODE (default on Windows) this will result in an error, instead of a warning. Bumping priorities up.
[12 Mar 2007 10:01] Alexander Barkov
This bug report is a duplicate for http://bugs.mysql.com/bug.php?id=25815,
which was pushed into 5.0.38,5.1.17-beta on the 8th of March 2007.

It works as expected with the latest version:

mysql> set names utf8;
Query OK, 0 rows affected (0.00 sec)

mysql> show variables like '%char%';
+--------------------------+--------------------------------------------+
| Variable_name            | Value                                      |
+--------------------------+--------------------------------------------+
| character_set_client     | utf8                                       |
| character_set_connection | utf8                                       |
| character_set_database   | latin1                                     |
| character_set_filesystem | binary                                     |
| character_set_results    | utf8                                       |
| character_set_server     | latin1                                     |
| character_set_system     | utf8                                       |
| character_sets_dir       | /usr/local/mysql-5.0/share/mysql/charsets/ |
+--------------------------+--------------------------------------------+
8 rows in set (0.02 sec)

mysql> CREATE TABLE `german` ( `a` text collate latin1_german2_ci) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_german2_ci;
Query OK, 0 rows affected (0.01 sec)

mysql> insert into german values ('ä'),('aaä'),('aa');
Query OK, 3 rows affected (0.00 sec)
Records: 3  Duplicates: 0  Warnings: 0

No warnings are generated anymore.