<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">On Tue, Jul 29, 2014 at 11:33 PM, Chirayu Chiripal <span dir="ltr"><<a href="mailto:chirayu.chiripal@gmail.com" target="_blank">chirayu.chiripal@gmail.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div class="gmail_extra"><div class="gmail_quote"><div><div class="h5">On Tue, Jul 29, 2014 at 11:02 PM, Isaac Bennetch <span dir="ltr"><<a href="mailto:bennetch@gmail.com" target="_blank">bennetch@gmail.com</a>></span> wrote:<br>



<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div><br>
<br>
On 7/29/14, 8:16 AM, Chirayu Chiripal wrote:<br>
> On Tue, Jul 29, 2014 at 1:32 AM, Isaac Bennetch <<a href="mailto:bennetch@gmail.com" target="_blank">bennetch@gmail.com</a><br>
</div><div><div>> <mailto:<a href="mailto:bennetch@gmail.com" target="_blank">bennetch@gmail.com</a>>> wrote:<br>
><br>
>     Hi,<br>
><br>
>     On 7/28/14, 1:30 PM, Chirayu Chiripal wrote:<br>
>     > Hi,<br>
>     ><br>
>     > My GSoC task for this week is "Improved notification when<br>
>     attempting to<br>
>     > insert invalid data". I would like to know at which places<br>
>     validation is<br>
>     > required to be done?<br>
><br>
>     The idea here is basically that if a user attempts to insert data that<br>
>     will be truncated that we'll warn them. Some of this has already been<br>
>     implemented (for instance, try to insert the text "foo" to a column of<br>
>     type INT(10); the field turns red indicating a problem).<br>
><br>
>     This can be enhanced, though, for instance the following scenarios do<br>
>     not warn correctly:<br>
>     * Insert 999 to a TINYINT<br>
>     * Insert 99999999999 to an INT<br></div></div></blockquote></div></div></div></div></div></blockquote><div><br></div><div>One thing which I didn't knew was that JS can handle numbers upto 53 bits without loosing precision. But as soon as number goes beyond that, then some round off error tends to occur. As MySQL, can have integers upto 64 bits length, the JS number comparison will not work. So, I have written my own BigInts comparison function to compare them in string format itself.<br>
<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div class="gmail_extra"><div class="gmail_quote"><div><div class="h5"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
<div><div>
><br>
><br>
> For integer types we can change our current input type="text" to input<br>
> type="number" and specify a min and max value using attributes. Or, we<br>
> still have to add a min and max value attribute and use<br>
> Javascript/Jquery to validate the field when it loses focus or at keyup<br>
> event.<br>
<br>
</div></div>I prefer a consistent experience for the user. Even though many browsers<br>
would properly deal with input type="number", it will give different<br>
feedback than our custom handling of, say, too many characters in a<br>
varchar field. So I would like to be consistent and use our own tests<br>
even for INT columns.<br></blockquote><div><br></div></div></div><div>Okay, so we will use our own validation.<br> <br></div><div class=""><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">




<br>
Note that in multibyte character sets, a single character may take<br>
several bytes of data to store. I'm not sure whether it's easy to<br>
correctly count bytes/characters in this case.<br></blockquote><div><br></div></div><div>Yeah, this is an important thing to be taken care of. I am not sure whether Javascript supports it natively but there should some way to do it. MySQL documentation says that "MySQL interprets length specifications in character column
            definitions in character units." I am not sure that by character units they mean unicode "code points" or something else.<br></div></div></div></div></blockquote><div><br></div><div>To test whether JS handles multibyte character strings length correctly, I compared the result of MySQL's CHAR_LENGTH(str) and JS's str.length with some random strings from different languages (Hindi, Gujarati, Chinese, Japanese) and the results were identical. So, I think we can rely on JS length property.<br>
  <br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div class="gmail_extra"><div class="gmail_quote"><div></div><div class=""><div><br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">




<br>
Another thought: we should allow the user to continue even if we don't<br>
think the data they're entering is okay -- the input field should turn<br>
red, but they should still be allowed to press the submit button and<br>
allow MySQL to truncate.<br></blockquote><div><br></div></div><div>Sure. </div></div></div></div></blockquote></div></div></div>