[mythtv-users] Questions on correcting database encoding under Gentoo while still on 0.21-fixes

Michael T. Dean mtdean at thirdcontact.com
Mon Nov 2 19:41:31 UTC 2009


On 11/02/2009 01:26 PM, Tom Dexter wrote:
> I've been running mythtv under Gentoo all along, and have always had
> the default Gentoo mysql configuration where the default connections
> etc are utf8.
>
> I'm still on 0.21-fixes but wanted to get this addressed now rather
> than when I decide to upgrade to 0.22, so I did so as per the wiki:
>
> http://wiki.mythtv.org/wiki/Fixing_Corrupt_Database_Encoding
>
> I've always had the same backedn and same configuration, so there's no
> reason I can think of that I'd have any "Partial" corruption.
>
> After changing the my.cnf and restarting mysql on the backend as per this part:
>
> http://wiki.mythtv.org/wiki/Fixing_Corrupt_Database_Encoding#Changing_the_MySQL_server_configuration
>
> Luckily before doing the restore I connected to the db and checked the
> 'status' command output.  It was still defaulting the connection etc
> to utf8.  Rather than removing the "character-set-server" and
> "default-character-set" lines in my.cnf as per the instructions, I
> discovered that I needed to expressly change them from utf8 to latin1.
>   

Yeah, just getting rid of the explicit change to utf8 and using the 
default is rather fragile as there may be my.cnf or ~/.my.cnf or scripts 
or something that change the mysql command to use utf8, still.  I'm 
guessing, though, that USE=utf8 must specify --with-charset=utf8 when 
compiling, so it explicitly changes the MySQL default in the binaries 
(which has always been latin1).  I modified the sed to change character 
sets to explicitly specify latin1.

This is why it would have been /much/ easier for someone who actually 
had this issue to figure out/write up the fix for it.  :)

>  Once I did that and restarted, everything looked correct.  At that
> point I went ahead with the restore from the corrected backup file and
> everything seems ok.  Had I not noticed that, I'm assuming future
> database writes would have caused a mess of "Partial" corruption.
>
> I think (though I'm not certain) that this may be related to the fact
> that Gentoo has a latin1 use flag for mysql (which is described as
> "Use LATIN1 encoding instead of UTF8") that is off by default.  I
> think this causes it to use utf8 by default if not otherwise specified
> in my.cnf.
>
> I also noticed that if I connected to the backend from the frontend
> (on which I have a minimal mysql install with client code only) using
> the mysql command line, the default client and connection character
> sets defaulted to utf8 (however the server character set and db
> character sets where properly set to latin1).  To be safe I made the
> same change in the my.cnf file on the frontend to ensure that
> everything connected with latin1 by default.  Once I did that,
> connecting to the backend from the frontend showed latin1 for
> everything.  I assumed that not doing this could possibly affect any
> database writes made directly to the db from the frontend (if that
> actually happens).
>
> I wanted to make sure that there isn't something wrong with anything
> I've done there.  I'd think the wiki needs something about this or
> someone could make quite a big mess, unless they're doing this as part
> of the 0.22 upgrade...as I understand it, none of those connection
> defaults etc should matter in 0.22.
>
> I was also curious why the instructions don't specify using the mc.sql
> to create the database...that's what I used.

Mainly because the mc.sql adds a GRANT that may mess up the user's DB 
access.  If you're using mythtv/mythtv as the username/password, mc.sql 
is no problem.

Also, if you use the mc.sql from 0.22-fixes or above it will set the 
default DB character set to utf8.  If you don't it will use the server 
default, which--after the changes mentioned above--should be latin1.  
However, the backup /should/ handle it OK (as it specifies 
CHARSET=latin1 for each CREATE TABLE), but it's "safer" to have the DB 
charset set to latin1, too, just in case.

Remember, too, that once you upgrade to 0.22-fixes, you can restore your 
original mysql configuration.

Thanks for the feedback.

Mike


More information about the mythtv-users mailing list