NYCPHP Meetup

NYPHP.org

[nycphp-talk] TRUNCATING MySQL FIELDS

David Krings ramons at gmx.net
Sat Jul 28 14:30:39 EDT 2007


PaulCheung wrote:
> I created a MySQL database with tables. In one of the tables, the 
> Customer Name& Address table, I use as the PRIMARY KEY a numeric field 
> that I call LICENCE which is a number generated through a random number 
> generator.
> 
> When I set the table up I set the LICENCE to INT(8). When populating 
> this field I was expecting any number larger than 8 digits to be 
> truncated and any number less than 8 digits to be padded out with zeros, 
> in both cases this is not happening. LICENCE is being populated with a 
> random number of varying size returned from the random number generator. 
> sometimes 9 digits, 8 digit, 7 digits and so on; but each time a unique 
> number. I thought INT(8) meant an interger of 8 digits long, no more and 
> no less. Does anybody know a way around this?
> 
> Paul

The way interpret the size setting is that it is the maximum length in 
characters. So I am a bit surprised that you can stuff something longer 
in the field. I never would expect MySQL to pad anything as there is no 
means to know by MySQL what you want it to be padded with.
I also wonder if one can limit an Integer field by character length 
anyway. Before crawling through the ifs and buts of MySQL, I'd just pad 
the number, if that is necessary at all. You should be able to set the 
random number generator to spit out integers of fixed and thus the same 
length.
Keep in mind that there is no real randomization with those generators. 
They use an algorithm that on millions of tries likely generates 
millions of different numbers, but does not guarantee to do so. That 
scam is the same in any programming language I ever came across. I'd go 
with something that is really unique, such as the unix time stamp. 
Unless you anticipate more than one entry per second that will be as 
unique as it gets as there will no second be repeated ever 
again....well, unless the system clock doesn't run on GMT and gets 
potentially set back from a time server sync. You can combine unix time 
stamp with the numerical portions of the current session ID (assuming 
you use sessions). That ought to do it.
Is there any specific significance to the LICENSE field (I doubt it)? 
Maybe you can make it to be the primary key and set it to autonumber or 
read the highest field value and add 1 through code.

David



More information about the talk mailing list