who is truncating columns? On 3/1/15, 3:27 PM, "Sergei Golubchik" <s...@mariadb.org> wrote:
>Hi, Tom! > >On Mar 01, Tom Worster wrote: >> I discovered this showstopper on Friday while working with real data in >> development of a new app. I managed to narrow it down today and filed >>the >> bug report. >> >> https://mariadb.atlassian.net/browse/MDEV-7650 >> >> Looks like Maria saves an illegally formatted dyncol string if a dynamic >> column is longer than 64kB and is not alphabetically last by name among >>the >> dynamic column in the blob. >> >> Tbh, even is this were fixed tomorrow so I could proceed with my work, >>I'm >> not sure I would use dyncols. My confidence in the feature has been >>shaken. >> It's a pity because the Active Record ORM extension I wrote was working. > >You could've paid attention to warnings from your test case: > >=========== >MariaDB [test]> insert into t (a, b, dcols) values (1, 'two', >column_create('one', 1, 'css', @txt)); >Query OK, 1 row affected, 1 warning (0.00 sec) > >Warning (Code 1265): Data truncated for column 'dcols' at row 1 >=========== > >Indeed, blob size is limited by 64K. Another test case for your bug is: > >=========== >MariaDB [test]> select length(column_create('one', 1, 'txt', @txt)); >+----------------------------------------------+ >| length(column_create('one', 1, 'css', @txt)) | >+----------------------------------------------+ >| 65563 | >+----------------------------------------------+ >1 row in set (0.00 sec) > >MariaDB [test]> select column_check(left(column_create('one', 1, 'txt', >@txt), 65535)); >+-----------------------------------------------------------------+ >| column_check(left(column_create('one', 1, 'txt', @txt), 65535)) | >+-----------------------------------------------------------------+ >| 1 | >+-----------------------------------------------------------------+ >1 row in set (0.00 sec) > >MariaDB [test]> select column_check(left(column_create('one', 1, 'css', >@txt), 65535)); >+-----------------------------------------------------------------+ >| column_check(left(column_create('one', 1, 'css', @txt), 65535)) | >+-----------------------------------------------------------------+ >| 0 | >+-----------------------------------------------------------------+ >1 row in set (0.00 sec) >=========== > >So the bug is that column_check() doesn't always detects that the dyncol >was truncated. > >Either way, even if column_check() returns 1, you probably shouldn't >use truncated dynamic columns in your application :) > >Use LONGBLOB instead. > >Regards, >Sergei > _______________________________________________ Mailing list: https://launchpad.net/~maria-discuss Post to : maria-discuss@lists.launchpad.net Unsubscribe : https://launchpad.net/~maria-discuss More help : https://help.launchpad.net/ListHelp