On 01/18/2015 03:48 AM, Kevin Johnson wrote:
Hi Adam,

It turns out that by default, MySQL on windows is case insensitive for table names, and case sensitive when installed in linux. To make the MySQL server case insensitive in linux, edit the my.cnf file and place lower_case_table_names = 1 after the [mysqld]. Then restart mysql. You must first rename all the tables to use lower case--so this is best done before you put anything in the database.

I think using all lower case table names would be recommended, so that the code is portable from windows to linux.

Yeah, it doesn't sound nice to ask everyone to tweak their MySQL config to make Ur/Web work. You may have been able to infer that I don't use Ur/Web with MySQL by choice personally, so it's easy to miss some change like this one in the latest MySQL that breaks things! (It definitely worked a few years back.)

But even so, if you do a "strings urblog.exe" you will find that the table is referenced by both mixed case and lower case. It seems like it just checks the existence of the lower case named tables, as any data I put in them was ignored. It used the data from the table with the mixed case name. I hope that gives you a hint on where to look. I should also note that the urblog.sql file contained the mixed case table names.

I've changed the compiler to, I hope, use all-lowercase names everywhere for MySQL. That change is pushed to the public Mercurial repo for Ur/Web. Please let me know if it doesn't work you now, too. (Thanks for the clear explanation of the problem!)

Kevin Johnson


On Sat, Jan 17, 2015 at 6:39 PM, Adam Chlipala <[email protected] <mailto:[email protected]>> wrote:

    Probably the underlying problem here is that MySQL is relatively
    underused and thus untested with Ur/Web!  If you compile with
    'urweb -debug', you will see all of the SQL strings that are being
    used, some in /tmp/webapp.c.  Can you tell me the right case to
    use everywhere?  (I /think/ case is at least being used
    consistently throughout the generated code, so apparently MySQL
    applies a case preference automatically somewhere.  Also, I'm
    pretty sure the main demo has worked with MySQL recently, so maybe
    some element of your configuration is nonstandard, e.g. the
    filesystem?)


    On 01/17/2015 02:23 PM, Kevin Johnson wrote:
    When I try to execute the examples from Gian Perrone's web
    tutorial, I get the following error:

    Fatal initialization error: Table 'uw_urblog_comment' does not exist.

    I am running mysql 5.5 on a ubuntu system.

    The urblog.sql defined the table as 'uw_Urblog_comment'.

    I have tried modifying the sql file to use 'uw_urblog_comment',
    but then the urblog.exe complains that 'uw_Urblog_comment'
    doesn't exist.

    I have to have both table names in the database.  Is there
    perhaps an ignore table name case flag I am missing somewhere
    that everyone uses?

    Thank you,

    Kevin Johnson

_______________________________________________
Ur mailing list
[email protected]
http://www.impredicative.com/cgi-bin/mailman/listinfo/ur

Reply via email to