Mysql vs Zeichensatz

MySQL, PostgreSQL, SQLite
audio07
Posts: 64
Joined: 2003-12-03 02:32
Location: Mainz

Mysql vs Zeichensatz

Post by audio07 » 2006-04-17 21:12

Tach zusammen!

Nach dem letzten Update von mysql (Gentoo-Linux) habe ich hier nun Probleme mit dem Zeichensatz. Sämtliche Daten liegen als latin1 in der Datenbank und ich würde diesen Zeichensatz auch gerne weiterhin nutzen.
Zu diesem Zweck habe ich alle Zeichensätze in der my.cnf auf latin gestellt:

mysql> show variables like 'character%';
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | latin1 |
| character_set_connection | latin1 |
| character_set_database | latin1 |
| character_set_results | latin1 |
| character_set_server | latin1 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+

Scheint also soweit zu stimmen. Jedoch ist die Ausgabe via PHP falsch. Phpmyadmin zeigt mir dazu folgende Angaben:

character set client utf8
(Globaler Wert) latin1
character set connection latin1
character set database latin1
character set results utf8
(Globaler Wert) latin1
character set server latin1
character set system utf8

Wie krieg' ich das nun am besten in den Griff, so dass ich nicht jedes Mal manuell bei einem mysql-Datenbank-Zugriff über PHP den Zeichensatz umstellen muss? Mir ist ehrlichgesagt nicht ganz klar, warum php partout utf8 einstellt.

Irgendwelche Vorschläge?

oxygen
Posts: 2138
Joined: 2002-12-15 00:10
Location: Bergheim

Re: Mysql vs Zeichensatz

Post by oxygen » 2006-04-17 21:23

http://www.rootforum.org/forum/viewtopic.php?t=40259 besonders der bugreport den Joe erwähnt hat, ist interessant.

User avatar
Joe User
Project Manager
Project Manager
Posts: 11137
Joined: 2003-02-27 01:00
Location: Hamburg

Re: Mysql vs Zeichensatz

Post by Joe User » 2006-04-17 21:51

Code: Select all

sed 's/utf8/latin1/g' http://www.rootforum.org/wiki/howto/gentoo/mysql > /etc/mysql/my.cnf
emerge =dev-lang/php-5.1.2-r1
/etc/init.d/apache2 restart
Last edited by Joe User on 2006-04-23 17:59, edited 1 time in total.
PayPal.Me/JoeUserFreeBSD Remote Installation
Wings for LifeWings for Life World Run

„If there’s more than one possible outcome of a job or task, and one
of those outcomes will result in disaster or an undesirable consequence,
then somebody will do it that way.“ -- Edward Aloysius Murphy Jr.

audio07
Posts: 64
Joined: 2003-12-03 02:32
Location: Mainz

Re: Mysql vs Zeichensatz

Post by audio07 » 2006-04-17 22:52

Ok danke... damit hab ich das Problem fixen können.
Jaja... Slackware war sicherlich mehr Gefrickel, aber da ist mir sowas nicht passiert 8)

itti
Posts: 49
Joined: 2004-10-25 21:16

Re: Mysql vs Zeichensatz

Post by itti » 2006-04-23 05:03

sorry wenn ich blöd dazwischenfrag aber mir hat jetzt die info hier noch nicht richtig weiterhelfen können... ich hatte auch latin-1 dbs und hab das update unwissentlich gefahren (wer vermutet von 4.1.14 auf 4.1.14-r1 schon große änderungen) und gehofft es würde genügen in der my.cnf latin-1 stehen zu lassen... anscheinend war dem nicht so und ich habs auch schon mal mit der gentoo my.cnf probiert in der utf-8 drinsteht, natürlich ohne die dbs zu konvertieren. auch kein großer bringer.

was kann ich denn nun tun? die hälfte der webauftritte streikt (vbulletin mag keine encodingerrors) und der rest glänzt mit grässlichem sonderzeichensalat.

-edit: gut sorry für den "spam" selbstverständlich hat es geholfen php auf die "bereinigte" version upzudaten wie es im bugtracker stand... mein fehler die bugid überlesen zu haben.

itti
Posts: 49
Joined: 2004-10-25 21:16

Re: Mysql vs Zeichensatz

Post by itti » 2006-04-23 17:54

jetzt noch ne blöde frage hinterher...

wenn ich jetzt meine latin-1 dbs alles auber per mysqldump --opt rauslutsche und dann per iconv auf utf-8 umbiege, den mysqld auf utf-8 stelle und dann wieder einlese, kann das funktionieren? ich hab ja keine ahnung wie lang diese neue php version, die die my.cnf beachtet auch so bleiben wird.

User avatar
Joe User
Project Manager
Project Manager
Posts: 11137
Joined: 2003-02-27 01:00
Location: Hamburg

Re: Mysql vs Zeichensatz

Post by Joe User » 2006-04-23 18:11

Code: Select all

emerge --info

emerge -pv dev-lang/php mysql

sed '/^(;.*)*$/d' /etc/mysql/my.cnf
Bevor Du mit iconv experiementierst: Backup anlegen!
PayPal.Me/JoeUserFreeBSD Remote Installation
Wings for LifeWings for Life World Run

„If there’s more than one possible outcome of a job or task, and one
of those outcomes will result in disaster or an undesirable consequence,
then somebody will do it that way.“ -- Edward Aloysius Murphy Jr.

itti
Posts: 49
Joined: 2004-10-25 21:16

Re: Mysql vs Zeichensatz

Post by itti » 2006-04-23 23:43

so?

Code: Select all

 emerge --info
Portage 2.0.54 (default-linux/amd64/2005.1, gcc-3.4.5, glibc-2.3.5-r2, 2.6.14-gentoo-r2-Meko x86_64)
=================================================================
System uname: 2.6.14-gentoo-r2-Meko x86_64 AMD Athlon(tm) 64 Processor 3500+
Gentoo Base System version 1.6.14
dev-lang/python:     2.4.2
sys-apps/sandbox:    1.2.12
sys-devel/autoconf:  2.13, 2.59-r7
sys-devel/automake:  1.4_p6, 1.5, 1.6.3, 1.7.9-r1, 1.8.5-r3, 1.9.6-r1
sys-devel/binutils:  2.16.1
sys-devel/libtool:   1.5.22
virtual/os-headers:  2.6.11-r2
ACCEPT_KEYWORDS="amd64"
AUTOCLEAN="yes"
CBUILD="x86_64-pc-linux-gnu"
CFLAGS="-march=k8 -pipe -O2"
CHOST="x86_64-pc-linux-gnu"
CONFIG_PROTECT="/etc /usr/kde/2/share/config /usr/kde/3/share/config /usr/share/config /var/qmail/control"
CONFIG_PROTECT_MASK="/etc/eselect/compiler /etc/gconf /etc/terminfo /etc/env.d"
CXXFLAGS="-march=k8 -pipe -O2"
DISTDIR="/usr/portage/distfiles"
FEATURES="autoconfig distlocks sandbox sfperms strict"
GENTOO_MIRRORS="ftp://ftp.tu-clausthal.de/pub/linux/gentoo/ ftp://sunsite.informatik.rwth-aachen.de/pub/Linux/gentoo http://linux.rz.ruhr-uni-bochum.de/download/gentoo-mirror/ ftp://linux.rz.ruhr-uni-bochum.de/gentoo-mirror/ http://ftp.uni-erlangen.de/pub/mirrors/gentoo ftp://ftp.uni-erlangen.de/pub/mirrors/gentoo ftp://ftp.join.uni-muenster.de/pub/linux/distributions/gentoo ftp://ftp.wh2.tu-dresden.de/pub/mirrors/gentoo http://mirrors.sec.informatik.tu-darmstadt.de/gentoo/ http://ftp-stud.fht-esslingen.de/pub/Mirrors/gentoo/ "
LINGUAS="de en"
MAKEOPTS="-j2"
PKGDIR="/usr/portage/packages"
PORTAGE_TMPDIR="/var/tmp"
PORTDIR="/usr/portage"
PORTDIR_OVERLAY="/usr/local/portage"
SYNC="rsync://rsync.europe.gentoo.org/gentoo-portage"
USE="amd64 acl apache2 berkdb bzip2 bzlib crypt curl ftp gd gdbm gif gmp iconv imap innodb jpeg libwww lzw lzw-tiff maildir mcal memlimit mhash mime mysql ncurses nls nocd nptl pam pcntl pcre pear perl png posix pwdb python readline sasl session sharedmem simplexml sockets ssl symlink tcpd tiff truetype ucs2 udev unicode userlocales vhosts xml xml2 xmlrpc xsl zlib linguas_de linguas_en userland_GNU kernel_linux elibc_glibc"
Unset:  ASFLAGS, CTARGET, INSTALL_MASK, LANG, LC_ALL, LDFLAGS

Code: Select all

 emerge -pv dev-lang/php mysql

These are the packages that I would merge, in order:

Calculating dependencies ...done!
[ebuild   R   ] dev-lang/php-5.1.2-r1  (-adabas) -apache +apache2 -bcmath +berkdb (-birdstep) +bzip2 -calendar -cdb -cgi -cjk +cli +crypt -ctype +curl -curlwrappers -db2 -dbase (-dbmaker) -debug -discard-path -doc (-empress) (-empress-bcs) (-esoob) -exif -fastbuild (-fdftk) (-filepro) (-firebird) -flatfile -force-cgi-redirect (-frontbase) +ftp +gd -gd-external +gdbm +gmp -hardenedphp -hash -hyperwave-api +iconv +imap (-informix) -inifile -interbase -iodbc -ipv6 -java-external -kerberos +ldap -libedit -mcve +memlimit +mhash -ming -msql -mssql +mysql -mysqli +ncurses +nls -oci8 (-oci8-instant-client) -odbc +pcntl +pcre -pdo -pdo-external -pic +posix -postgres -qdbm +readline -recode -reflection -sapdb +sasl +session -sharedext -sharedmem +simplexml -snmp -soap +sockets (-solid) -spell -spl -sqlite +ssl (-sybase) (-sybase-ct) -sysvipc +threads -tidy -tokenizer +truetype +unicode -vm-goto -vm-switch -wddx +xml -xmlreader +xmlrpc -xmlwriter -xpm +xsl -yaz +zip +zlib 0 kB
[ebuild   R   ] dev-db/mysql-4.1.14-r1  +berkdb -big-tables -cluster -debug -embedded -extraengine -minimal +perl -raid (-selinux) -srvdir +ssl -static 0 kB

Code: Select all

 sed '/^(;.*)*$/d' /etc/mysql/my.cnf
[php-apache2handler]
character_set         = latin1
character-sets-dir    = latin1
default-character-set = latin1

[php-cgi-fcgi]
character_set         = latin1
character-sets-dir    = latin1
default-character-set = latin1

[php-cli]
character_set         = latin1
character-sets-dir    = latin1
default-character-set = latin1

[client]
character_set         = latin1
character-sets-dir    = latin1
default-character-set = latin1
port                  = 3306
socket                = /var/run/mysqld/mysqld.sock

[mysql]
character-sets-dir    = latin1
default-character-set = latin1

[mysqladmin]
character-sets-dir    = latin1
default-character-set = latin1

[mysqlcheck]
character-sets-dir    = latin1
default-character-set = latin1

[mysqldump]
character-sets-dir    = latin1
default-character-set = latin1
max_allowed_packet    = 16M
quick

[mysqlimport]
character-sets-dir    = latin1
default-character-set = latin1

[mysqlshow]
character-sets-dir    = latin1
default-character-set = latin1

[isamchk]
character-sets-dir    = latin1
key_buffer_size       = 128M
sort_buffer_size      = 128M
read_buffer_size      = 4M
write_buffer_size     = 4M

[myisamchk]
character-sets-dir    = latin1
key_buffer_size       = 128M
sort_buffer_size      = 128M
read_buffer_size      = 4M
write_buffer_size     = 4M

[myisampack]
character-sets-dir    = latin1

[mysqld_safe]
err-log               = /var/log/mysql/mysql.err

[mysqld]
character-set-server  = latin1
default-character-set = latin1
user                  = mysql
port                  = 3306
bind-address          = 127.0.0.1
socket                = /var/run/mysqld/mysqld.sock
pid-file              = /var/run/mysqld/mysqld.pid
log-error             = /var/log/mysql/mysqld.err
basedir               = /usr
datadir               = /var/lib/mysql
tmpdir                = /tmp
language              = /usr/share/mysql/english
log-bin               = mysql-bin
server-id             = 1
sync_binlog           = 1
max_binlog_size       = 10M
expire_logs_days      = 2
slave_compressed_protocol = 1
delay-key-write       = ALL
skip-locking
skip-networking
skip-name-resolve
skip-external-locking
skip-show-database
safe-user-create      = 1
key_buffer_size       = 128M
sort_buffer_size      = 4M
join_buffer_size      = 4M
read_buffer_size      = 4M
read_rnd_buffer_size  = 8M
myisam_sort_buffer_size = 64M
max_allowed_packet    = 16M
thread_cache_size     = 8
table_cache           = 256
query_cache_type      = 1
query_cache_size      = 32M
query_cache_limit     = 1M
thread_concurrency    = 8
local-infile          = 0
long_query_time       = 4
log_slow_queries
log_long_format
myisam_recover
skip-innodb
innodb_buffer_pool_size = 32M
innodb_additional_mem_pool_size = 4M
innodb_data_home_dir  = /var/lib/mysql/
innodb_log_arch_dir   = /var/lib/mysql/
innodb_log_group_home_dir = /var/lib/mysql/
innodb_data_file_path = ibdata1:10M:autoextend:max:128M
innodb_log_file_size  = 5M
innodb_log_buffer_size = 8M
innodb_log_files_in_group = 2
innodb_flush_log_at_trx_commit = 1
innodb_lock_wait_timeout = 50

[mysqlhotcopy]
interactive-timeout