:(, oh how I wanted it to be true in MySQL 4.1, maybe it's a bug?.. I
don't know realy...

Here is Copy From Console:

mysql> create table `temp` (
    -> col1 int(9) NOT NULL,
    -> col2 date NOT NULL,
    -> col3 Varchar(30) NOT NULL,
    -> col4 Varchar(30));
Query OK, 0 rows affected (0.02 sec)

mysql> desc `temp`;
+-------+-------------+-------------------+------+-----+------------+---
----+
| Field | Type        | Collation         | Null | Key | Default    |
Extra |
+-------+-------------+-------------------+------+-----+------------+---
----+
| col1  | int(9)      | binary            |      |     | 0          |
|
| col2  | date        | latin1_swedish_ci |      |     | 0000-00-00 |
|
| col3  | varchar(30) | latin1_swedish_ci |      |     |            |
|
| col4  | varchar(30) | latin1_swedish_ci | YES  |     | NULL       |
|
+-------+-------------+-------------------+------+-----+------------+---
----+
4 rows in set (0.01 sec)

As you see, default NULL is only for col3 - Nullable column :(

P.S. there is no matter what type of table you create (MyISAM, InnoDB,
etc.).

So, Cal Evans, maybe you can try above create statement and email MySQL
output?







-----Original Message-----
From: Cal Evans [mailto:[EMAIL PROTECTED]
Sent: Tuesday, October 07, 2003 9:04 PM
To: Arūnas Milašauskas
Cc: Fortuno, Adam; [EMAIL PROTECTED]
Subject: Re: FW: MySQL not null vs MSAccess required


I hate to disagree with you but in the 30+ databases I've created in 
MySQL, not defining a default value leaves the default value as NULL. 
Setting that field to NOT NULL means that I have to enter something or 
the record won't commit.

=C=
p.s. I use the 3.xx series, maybe this behavior has changed in 4 but I 
hope not.
* Cal Evans
* http://www.eicc.com
* We take care of your IT,
* So you can take care of your business.
*
* I think inside the sphere.


Arūnas Milašauskas wrote:
> No, no, no ... Dear Friends, defining column as NOT NULL and do not
> specifying default value does not means that there is no default value
> at all. MySQL defines default value for that column of his on decision
> (for Date it's '0000-00-00', for text column's it is '', for number
> column's it is '0' and so on...)
> 
>       P.S. I use MySQL 4.1alpha, but I am true it is on other versions
> too.
> 
> Regards,
>       Arunas
> 
> -----Original Message-----
> From: Cal Evans [mailto:[EMAIL PROTECTED]
> Sent: Tuesday, October 07, 2003 8:51 PM
> To: Arūnas Milašauskas
> Cc: Fortuno, Adam; [EMAIL PROTECTED]
> Subject: Re: FW: MySQL not null vs MSAccess required
> 
> 
> Of course the OT NULL is not firing, you put DEFAULT ''. This defeats 
> the purpose of NOT NULL since every new record written has a default 
> value that IS NOT NULL. (Whether the user entered the field or not.
> 
> remove the DEFAULT form the table definition and leave the NOT NULL. 
> This will prevent ANY program (even Access) from writing to the table 
> without specifying a value.
> 
> Now if you want more than that you'll have to write it into your FE. 
> (i.e.not null and not '')
> 
> HTH,
> =C=
> * Cal Evans
> * http://www.eicc.com
> * We take care of your IT,
> * So you can take care of your business.
> *
> * I think inside the sphere.
> 
> 
> Arūnas Milašauskas wrote:
> 
>>Yes it's true, when someone enter's NULL value, but when someone does
>>not even touch that field on the form? :(
>>
>>      In other DBMS it's like a rule to make all possible chechking on
>>DB for any unforeseen accident... So I'm hopefully waiting for MySQL
> 
> 5xx
> 
>>relise to realize this...
>>      As for now I see that there is no other way as to make check
>>constraint's validation (even for Required columns :( ) on forms on
>>client side :(
>>
>>-----Original Message-----
>>From: Fortuno, Adam [mailto:[EMAIL PROTECTED]
>>Sent: Tuesday, October 07, 2003 8:33 PM
>>To: Arūnas Milašauskas
>>Subject: RE: MySQL not null vs MSAccess required
>>
>>
>>Arunas,
>>
>>Then take change the table's definition to make the CustName field NOT
>>NULL
>>and don't include a default value. When someone attempts to change the
>>CustName field to NULL, you'll get a runtime error.
>>
>>Regards,
>>Adam
>>
>>-----Original Message-----
>>From: Arūnas Milašauskas 
>>Sent: Tuesday, October 07, 2003 8:33 PM
>>To: '[EMAIL PROTECTED]'
>>Subject: FW: MySQL not null vs MSAccess required
>>
>>
>>
>>MSAccess as frontend :) sorry, you're right.
>>
>>      So, I defined column without default value, but nothing
>>changed... I still can enter empty values into field :(
>>
>>      Now, actualy I want MySQL to rise run-time error, because there
>>are many forms in access and DB structure is changing ... I mean it is
>>better (I think) to capture MySQL run-time errors (I have library
> 
> writen
> 
>>for this) than edit every form trigger's after changing NOT NULL
> 
> columns
> 
>>in DB especially if there is more than one form allowing to enter data
>>into such tables...
>>
>>      Thanks, for thought about form self validation ;)
>>
>>Regards,
>>      Arunas
>>
>>
>>      
>>
>>-----Original Message-----
>>From: Fortuno, Adam [mailto:[EMAIL PROTECTED]
>>Sent: Tuesday, October 07, 2003 8:09 PM
>>To: Arūnas Milašauskas
>>Cc: [EMAIL PROTECTED]
>>Subject: RE: MySQL not null vs MSAccess required
>>
>>
>>Arunas,
>>
>>Actually, I think you mean MySQL is the backend for MS Access.
>>
>>Don't assume columns that are NOT NULL must have a default value. You
>>are
>>welcome to define columns as NOT NULL without a default value. Doing
>>this
>>will force the client (the Access form's) to require a value before
>>inserting the record.
>>
>>CREATE TABLE customers (
>> ID INT(9) NOT NULL,
>> CustName VARCHAR(30) NOT NULL,
>> ...
>>) Type = MyISAM;
>>
>>Since you're using an MS Access front-end to allow users to enter
> 
> data.
> 
>>Put
>>logic in your form to require the users to populate a value for the
>>customer
>>name. Something like this:
>>
>>** Assuming you have a form with customer name field named
> 
> "tbCustName".
> 
>>Private Sub Form_BeforeUpdate()
>>  Dim strMsg as String
>>
>>On Error Resume Next
>>
>>  If (Not ValidateSelf()) Then
>>      '** Notify the user that the form failed validation.
>>      Let strMsg = "Please ensure all required fields are populated."
>>      Call MsgBox(strMsg, vbOkOnly)
>>      
>>      '** Cancel's the save event.
>>      Call DoCmd.CancelEvent
>>  EndIf
>>End Sub
>>
>>Private Function ValidateSelf()
>>  Dim blnIsValid As Boolean
>>  
>>  '** Determine if the field has a value.
>>  If (Not Nz(Me.tbCustName.Value, "") = "") Then Let blnIsValid = True
>>
>>  '** Return the results of the validation process.
>>  Let ValidateSelf = blnIsValid
>>End Function
>>
>>Its been a while since I've used Access for soemthing like this. My
> 
> VBA
> 
>>might be a little rusty. The point is you want to enforce user
>>population of
>>the customer name field in the client. If you do it from MySQL, the
> 
> odbc
> 
>>driver will generate a runtime error, which Access will then need to
>>capture
>>- you should capture errors anyway.
>>
>>Regards,
>>Adam
>>
>>-----Original Message-----
>>From: Arunas Mila?auskas [mailto:[EMAIL PROTECTED]
>>Sent: Tuesday, October 07, 2003 12:23 PM
>>To: [EMAIL PROTECTED]
>>Subject: MySQL not null vs MSAccess required
>>
>>
>>Hello,
>>      I'm Using MSAccess as backend for my MySQL database. Tables are
>>linked with MyODBC 3.51, so all data user enters through MSAccess
> 
> forms.
> 
>>      I need that some fields (CustName) in MySQL table (CUSTOMERS)
>>would be required, it means, that user must fill a value into that
> 
> field
> 
>>(CustName) displayed on MSAccess form (Customers).
>>
>>      MySQL table create statement is:
>>              create table CUSTOMERS (ID `ID` int(9) NOT NULL,
>>`CustName` Varchar(30) NOT NULL DEFAULT '');
>>      Default value in table declaration is requred as you know for
>>NOT NULL columns.
>>
>>      The problem is:
>>              When user enters a new record in MSAccess form and does
>>not even touch field "CustName", new record is created with empty
> 
> string
> 
>>as default value!!!!
>>              If user enters for example "1" and then deletes the
>>value in MSAccess form, Access reports, that value must not be NULL.
> 
> But
> 
>>what can I do if user does not even go into that field and leave empty
>>field? User Must Enter A Value!!!! How to do this without writing many
>>code in every form with required (NOT NULL) fields?
>>
>>
>>      Thanks for any help, It is needed very very much because for now
>>any user can not fill required fields!
>>      It would be very very appreciated
>>
>>Regards, Arunas
>>
> 
> 


--
MySQL General Mailing List
For list archives: http://lists.mysql.com/mysql
To unsubscribe:    http://lists.mysql.com/[EMAIL PROTECTED]

Reply via email to