Fixed bug #32282: TEXT silently truncates when value is exactly 65536

bytes length.

The server has been modified to report warnings on truncation to
65536 bytes as usual.
parent ee1bb663
Branches unavailable
Tags unavailable
...@@ -807,4 +807,18 @@ set @@sql_mode='TRADITIONAL'; ...@@ -807,4 +807,18 @@ set @@sql_mode='TRADITIONAL';
create table t1 (a text default ''); create table t1 (a text default '');
ERROR 42000: BLOB/TEXT column 'a' can't have a default value ERROR 42000: BLOB/TEXT column 'a' can't have a default value
set @@sql_mode=''; set @@sql_mode='';
CREATE TABLE t (c TEXT CHARSET ASCII);
INSERT INTO t (c) VALUES (REPEAT('1',65537));
Warnings:
Warning 1265 Data truncated for column 'c' at row 1
INSERT INTO t (c) VALUES (REPEAT('2',65536));
Warnings:
Warning 1265 Data truncated for column 'c' at row 1
INSERT INTO t (c) VALUES (REPEAT('3',65535));
SELECT LENGTH(c), CHAR_LENGTH(c) FROM t;
LENGTH(c) CHAR_LENGTH(c)
65535 65535
65535 65535
65535 65535
DROP TABLE t;
End of 5.0 tests End of 5.0 tests
...@@ -436,4 +436,15 @@ set @@sql_mode='TRADITIONAL'; ...@@ -436,4 +436,15 @@ set @@sql_mode='TRADITIONAL';
create table t1 (a text default ''); create table t1 (a text default '');
set @@sql_mode=''; set @@sql_mode='';
#
# Bug #32282: TEXT silently truncates when value is exactly 65536 bytes
#
CREATE TABLE t (c TEXT CHARSET ASCII);
INSERT INTO t (c) VALUES (REPEAT('1',65537));
INSERT INTO t (c) VALUES (REPEAT('2',65536));
INSERT INTO t (c) VALUES (REPEAT('3',65535));
SELECT LENGTH(c), CHAR_LENGTH(c) FROM t;
DROP TABLE t;
--echo End of 5.0 tests --echo End of 5.0 tests
...@@ -858,7 +858,7 @@ copy_and_convert(char *to, uint32 to_length, CHARSET_INFO *to_cs, ...@@ -858,7 +858,7 @@ copy_and_convert(char *to, uint32 to_length, CHARSET_INFO *to_cs,
with optional left padding (for binary -> UCS2 conversion) with optional left padding (for binary -> UCS2 conversion)
SYNOPSIS SYNOPSIS
well_formed_copy_nhars() well_formed_copy_nchars()
to Store result here to Store result here
to_length Maxinum length of "to" string to_length Maxinum length of "to" string
to_cs Character set of "to" string to_cs Character set of "to" string
...@@ -997,7 +997,10 @@ well_formed_copy_nchars(CHARSET_INFO *to_cs, ...@@ -997,7 +997,10 @@ well_formed_copy_nchars(CHARSET_INFO *to_cs,
goto outp; goto outp;
} }
else else
{
from= from_prev;
break; break;
}
} }
*from_end_pos= from; *from_end_pos= from;
res= to - to_start; res= to - to_start;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment