I am dealing with some database abstraction layers and many of them are utilizing characteristics like "String" that is VARCHAR 250 or INTEGER that has period of 11 numbers. But for instance I've something that'll be under 250 figures lengthy. Must I go making it less? Will it really makes any valuable difference?

Thanks ahead of time!

INT length does nothing. All INTs are 4 bytes. The quantity you can set, is just employed for zerofill (and who uses that!?).

VARCHAR length does more. It is the maxlength from the area. VARCHAR is saved to ensure that just the actual information is saved, therefore the length does not mattter. Nowadays, you could have bigger VARCHARs than 255 bytes (being 256^2-1). The main difference may be the bytes that can be used for the area length. VARCHAR(100) and VARCHAR(8) and VARCHAR(255) use 1 byte in order to save the area length. VARCHAR(1000) uses 2.

Hope that can help =)

edit
I more often than not make my VARCHARs 250 lengthy. Actual length ought to be checked within the application anyway. For bigger fields I personally use TEXT (and individuals are saved in a different way, so could be so much longer).

edit
I'm not sure how current this really is, but previously assist me to (understand): http://help.scibit.com/Mascon/masconMySQL_Field_Types.html

Not too sure in MySQL, however in MS SQL it only is important for sufficiently large databases. Typically, I love to use more compact fields for any) the area saving (it never affects to rehearse good habits) and b) for that implied validation (knowing a particular area will not be a lot more than 10 figures, why allow eleven, not to mention 250?).

I thinks Rudie is wrong, not every INTs are 4 bytes... in MySQL you've:

tinyint = 1 byte, smallint = 2 bytes, mediumint = 3 bytes, int = 4 bytes, bigint = 8 bytes.

I believe Rudie refers back to the "display with" that's the quantity you put between parenthesis when you're developing a column, e.g.:

age INT(3)

You are telling towards the RDBMS simply to SHOW a maximum of 3 amounts.

And VARCHARs are (variable length charcter string) if you declare let us say title varchar(5000) and also you store a title like "Mario" you simply are utilizing 7 bytes (5 for that data and a pair of for the size of the worthiness).

First, keep in mind that the database is supposed to store details and is made to safeguard itself against bad data. Thus, the main reason you don't want to permit a person to go in 250 figures for any name is the fact that a person will put a myriad of data inside that's not really a name. They'll take their whole title, their under garments size, a singular by what they did last summer time and so forth. Thus, you need to make an effort to enforce the information is as correct as you possibly can. It's a mistake to visualize the application may be the sole protector against bad data. You want customers to tell you just how they'd an issue stuffing War in Peace right into a given column.

Thus, the most crucial real question is, "What's the most suitable value for that data being saved?" Ideally, you would employ an int along with a check constraint to make sure that the values come with an appropriate range (e.g. more than zero, under a billion etc.). Regrettably, this is just one of MySQL's finest weakness: it doesn't recognition check constraints. That merely means you have to implement individuals integrity inspections in triggers which of course is much more cumbersome.

Will the main difference between an int (4 bytes) make an significant impact on a tinyint (1 byte)? Clearly, it is dependent on the quantity of data. For a moment have a maximum of 10 rows, the reply is clearly no. For a moment have 10 billion rows, the reply is clearly "Yes". However, IMO, this really is premature optimisation. It is much better to pay attention to making certain correctness first.

For text, you need to request whether your computer data should support Chinese, Japanese or non-ANSI values (i.e., in the event you use nvarchar or varchar)? Performs this value represent a real life code just like a currency code, or bank code with a specific specs?