144

After changing the data type of a MySql column in order to store Twilio call ids (34 char strings), I try to manually change the data in that column with:

update calls 
   set incoming_Cid='CA9321a83241035b4c3d3e7a4f7aa6970d' 
 where id='1';

However I get an error which doesn't make sense seeing as the column's data type was properly modified?

| Level ||| Code | Message | Warning | 1265 | Data truncated for column 'incoming_Cid' at row 1

9
  • 2
    What is the exact datatype after modification? Commented Aug 6, 2013 at 19:56
  • 3
    Are you sure that column has specified enough room for text of that length?
    – John Conde
    Commented Aug 6, 2013 at 19:56
  • 1
    ALTER TABLES calls MODIFY incoming_Cid STRING; is what I did.
    – Zagstrug
    Commented Aug 6, 2013 at 20:18
  • 1
    Deleted previous comment due to EDIT: I haven't specified that the string should be char(34) instead of char(1), but don't know how to so
    – Zagstrug
    Commented Aug 6, 2013 at 20:53
  • 1
    STRING is not a MySQL type. What is your database engine?
    – RandomSeed
    Commented Aug 6, 2013 at 21:04

11 Answers 11

128
Answer recommended by Twilio Collective

Your problem is that at the moment your incoming_Cid column defined as CHAR(1) when it should be CHAR(34).

To fix this just issue this command to change your columns' length from 1 to 34

ALTER TABLE calls CHANGE incoming_Cid incoming_Cid CHAR(34);

Here is SQLFiddle demo

3
  • 2
    I was sending String for ENUM column, instead of integers. Commented Feb 17, 2021 at 18:21
  • I got the error when calling this: ALTER TABLE properties CHANGE verpackt verpackt FLOAT( 10, 3 ) NOT NULL DEFAULT '0.000' - before it was FLOAT( 8, 3 ) NULL - The problem is, that there are some values in "verpackt" already, so removing the NULL is not possible
    – rubo77
    Commented Apr 27, 2021 at 13:20
  • I got this error trying to set an integer field to "11 kg". I believe an earlier version of MySQL silently converted that to 11.
    – Bob Stein
    Commented Nov 28, 2022 at 22:19
33

I had the same problem because of an table column which was defined as ENUM('x','y','z') and later on I was trying to save the value 'a' into this column, thus I got the mentioned error.

Solved by altering the table column definition and added value 'a' into the enum set.

10

By issuing this statement:

ALTER TABLES call MODIFY incoming_Cid CHAR;

... you omitted the length parameter. Your query was therefore equivalent to:

ALTER TABLE calls MODIFY incoming_Cid CHAR(1);

You must specify the field size for sizes larger than 1:

ALTER TABLE calls MODIFY incoming_Cid CHAR(34);
6

However I get an error which doesn't make sense seeing as the column's data type was properly modified?

| Level | Code | Msg | Warn | 12 | Data truncated for column 'incoming_Cid' at row 1

You can often get this message when you are doing something like the following:

REPLACE INTO table2 (SELECT * FROM table1);

Resulted in our case in the following error:

SQL Exception: Data truncated for column 'level' at row 1

The problem turned out to be column misalignment that resulted in a tinyint trying to be stored in a datetime field or vice versa.

1

In my case it was a table with an ENUM that accepts the days of the week as integers (0 to 6). When inserting the value 0 as an integer I got the error message "Data truncated for column ..." so to fix it I had to cast the integer to a string. So instead of:

$item->day = 0;

I had to do;

$item->day = (string) 0;

It looks silly to cast the zero like that but in my case it was in a Laravel factory, and I had to write it like this:

$factory->define(App\Schedule::class, function (Faker $faker) {
    return [
        'day' => (string) $faker->numberBetween(0, 6),
        //
    ];
});
1

I had the same problem, with a database field with type "SET" which is an enum type.

I tried to add a value which was not in that list.

The value I tried to add had the decimal value 256, but the enum list only had 8 values.

1: 1   -> A
2: 2   -> B
3: 4   -> C
4: 8   -> D
5: 16  -> E
6: 32  -> F
7: 64  -> G
8: 128 -> H

So I just had to add the additional value to the field.

enter image description here

Reading this documentation entry helped me to understand the problem.

MySQL stores SET values numerically, with the low-order bit of the stored value corresponding to the first set member. If you retrieve a SET value in a numeric context, the value retrieved has bits set corresponding to the set members that make up the column value. For example, you can retrieve numeric values from a SET column like this:

mysql> SELECT set_col+0 FROM tbl_name; If a number is stored into a

If a number is stored into a SET column, the bits that are set in the binary representation of the number determine the set members in the column value. For a column specified as SET('a','b','c','d'), the members have the following decimal and binary values.

SET Member  Decimal Value   Binary Value
    'a'                1          0001
    'b'                2          0010
    'c'                4          0100
    'd'                8          1000

If you assign a value of 9 to this column, that is 1001 in binary, so the first and fourth SET value members 'a' and 'd' are selected and the resulting value is 'a,d'.

1

when i first tried to import csv into mysql , i got the same error , and then i figured out mysql table i created doesn't have the character length of the importing csv field , so if it's the first time importing csv

  1. its a good idea to give more character length .
  2. label all fields as varchar or text , don't blend int or other values.

then you are good to go.

0
1

Check whether you are using the 'enum' datatype.If you are using 'enum' datatype then the items inside the enum datatype should be exactly match with the data which you are entering.Ex. You are taking the enum datatype like this: enum('book',stationery','others') then when you are inserting the data into the database you have to do like this: INSERT INTO database_name.table_name (column1,...columnn) VALUES(). THE value should include same items which you are mentioned within the bracket of enum datatype.

0
0

my issue was I used single quote instead of double quotes which add extra words in Boolean column

0

I Faced the same issue .In my case i was inserting a empty string for a numeric column.But by inserting a numeric value in string form for same column it got resolved e.g '12.56' --> numeric column will work but '' --> numeric column will give the above mentioned error. Note: For numeric columns in MySql we can pass values in double quotes also .

0

In some cases this can be result of wrong type of input. For example, you have a column decimal(10,2) and the input isn't sanitized and is 7,7 but should be 7.7.

Not the answer you're looking for? Browse other questions tagged or ask your own question.