PHWinfo banniere

Titres
PORTAIL ANNUAIRE ARTICLES COMPARATEUR HÉBERGEURS DEVIS FORUMS RÉDUCTEUR D'URL
Précédent   PHWinfo > Autres forums > Forum Programmation & Conception > comp.databases.mysql > Mysql database in UTF8, PHP shows latin1 (iso-8859-1)
S'inscrire FAQ Membres Recherche Messages du jour Marquer les forums comme lus
Mysql database in UTF8, PHP shows latin1 (iso-8859-1)

Réponse
 
LinkBack Outils de la discussion
Vieux 04/04/2008, 09h11   #1
alex
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Mysql database in UTF8, PHP shows latin1 (iso-8859-1)

I've converted a latin1 database I have to utf8. The process has been:

# mysqldump -u root -p --default-character-set=latin1 -c --insert-ignore
--skip-set-charset mydb > mydb.sql

# iconv -f ISO-8859-1 -t UTF-8 mydb.sql > mydb_utf8.sql

[then i replaced all CHARSET=latin1 to CHARSET=utf8 in the file, and
checked in the editor that non default characters as accents were viewed
correctly using UTF8 charset]

mysql> CREATE DATABASE mydb_utf8 CHARACTER SET utf8 COLLATE utf8_general_ci;

# mysql -u root -p --default-character-set=utf8 mydb_utf8 < mydb_utf8.sql


I made a simple script in PHP to dump data from tables which had non
standard characters. But the resulting page is viewed correctly in
iso-8859-1 encoding and not in UTF-8.

At this moment i'm clueless were the problem lies.


..alex
  Réponse avec citation
Vieux 04/04/2008, 09h16   #2
Norbert Tretkowski
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: Mysql database in UTF8, PHP shows latin1 (iso-8859-1)

Am Fri, 04 Apr 2008 10:11:16 +0200 schrieb alex:
> I made a simple script in PHP to dump data from tables which had non
> standard characters. But the resulting page is viewed correctly in
> iso-8859-1 encoding and not in UTF-8.


http://dev.mysql.com/doc/refman/5.0/...onnection.html

I guess using "set names utf8" should .

Norbert
  Réponse avec citation
Vieux 04/04/2008, 10h31   #3
alex
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: Mysql database in UTF8, PHP shows latin1 (iso-8859-1)

En/na Norbert Tretkowski ha escrit:
> Am Fri, 04 Apr 2008 10:11:16 +0200 schrieb alex:
>> I made a simple script in PHP to dump data from tables which had non
>> standard characters. But the resulting page is viewed correctly in
>> iso-8859-1 encoding and not in UTF-8.

>
> http://dev.mysql.com/doc/refman/5.0/...onnection.html
>
> I guess using "set names utf8" should .
>


Yes, it s, but why should i change my app?

I mean, if the database is set to utf8, the tables are utf8 too (and
just to check, i've also set under [client], [mysqld] and [server] the
value default_character_set=utf8), shouldn't php return me the string as
utf8?

Isn't this a bit bugged?
  Réponse avec citation
Vieux 04/04/2008, 11h02   #4
Michael Fesser
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: Mysql database in UTF8, PHP shows latin1 (iso-8859-1)

..oO(alex)

>En/na Norbert Tretkowski ha escrit:
>> Am Fri, 04 Apr 2008 10:11:16 +0200 schrieb alex:
>>> I made a simple script in PHP to dump data from tables which had non
>>> standard characters. But the resulting page is viewed correctly in
>>> iso-8859-1 encoding and not in UTF-8.

>>
>> http://dev.mysql.com/doc/refman/5.0/...onnection.html
>>
>> I guess using "set names utf8" should .
>>

>
>Yes, it s, but why should i change my app?
>
>I mean, if the database is set to utf8, the tables are utf8 too (and
>just to check, i've also set under [client], [mysqld] and [server] the
>value default_character_set=utf8), shouldn't php return me the string as
>utf8?
>
>Isn't this a bit bugged?


Just storing the data as UTF-8 is not enough. You also have to set the
connection between MySQL and your script to UTF-8 and PHP has to send a
correct HTTP header back to the browser.

Micha
  Réponse avec citation
Vieux 04/04/2008, 11h26   #5
alex
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: Mysql database in UTF8, PHP shows latin1 (iso-8859-1)

En/na Michael Fesser ha escrit:

>
> Just storing the data as UTF-8 is not enough. You also have to set the
> connection between MySQL and your script to UTF-8 and PHP has to send a
> correct HTTP header back to the browser.


Ok, i know that i must send correct headers, but still having this
variables:

+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | utf8 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | utf8 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+

The output is ISO, and that is what freaks me out. :P
  Réponse avec citation
Vieux 04/04/2008, 13h06   #6
alex
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: Mysql database in UTF8, PHP shows latin1 (iso-8859-1)

En/na Jerry Stuckle ha escrit:

>
> Check Micha's comment again:
>
> "...and PHP has to send a correct HTTP header back to the browser."
>
> The dataset connection and charset have nothing to do with the charset
> sent in the page header. You can set the correct charset for the page
> in your Apache server or in PHP.



It's not a http header problem as i have in my script:

<?php header("Content-type: text/html; charset=utf-8"); ?>

it seems a php problem as when i execute "show variables" in an mysql
console i get:

character_set_client=utf8

but from php i get:

character_set_client=latin1

when the default character set is utf8 (in my.cnf) and i have not
configured it for latin1 anywhere.

I've got 2 more apps one in java and the another one in .Net. None of
those had to be modified in order to retrieve the results. But PHP needs
the "set names utf8" in order to get the proper encoding.
  Réponse avec citation
Vieux 04/04/2008, 13h20   #7
Jerry Stuckle
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: Mysql database in UTF8, PHP shows latin1 (iso-8859-1)

alex wrote:
> En/na Michael Fesser ha escrit:
>
>>
>> Just storing the data as UTF-8 is not enough. You also have to set the
>> connection between MySQL and your script to UTF-8 and PHP has to send a
>> correct HTTP header back to the browser.

>
> Ok, i know that i must send correct headers, but still having this
> variables:
>
> +--------------------------+----------------------------+
> | Variable_name | Value |
> +--------------------------+----------------------------+
> | character_set_client | utf8 |
> | character_set_connection | utf8 |
> | character_set_database | utf8 |
> | character_set_filesystem | binary |
> | character_set_results | utf8 |
> | character_set_server | utf8 |
> | character_set_system | utf8 |
> | character_sets_dir | /usr/share/mysql/charsets/ |
> +--------------------------+----------------------------+
>
> The output is ISO, and that is what freaks me out. :P
>


Check Micha's comment again:

"...and PHP has to send a correct HTTP header back to the browser."

The dataset connection and charset have nothing to do with the charset
sent in the page header. You can set the correct charset for the page
in your Apache server or in PHP.

--
==================
Remove the "x" from my email address
Jerry Stuckle
JDS Computer Training Corp.
jstucklex@attglobal.net
==================

  Réponse avec citation
Vieux 04/04/2008, 13h49   #8
Willem Bogaerts
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: Mysql database in UTF8, PHP shows latin1 (iso-8859-1)

> it seems a php problem as when i execute "show variables" in an mysql
> console i get:
>
> character_set_client=utf8
>
> but from php i get:
>
> character_set_client=latin1


That is a problem I also had. the [mysql] section of my.cnf is for the
command-line client only. A [client] section may or may not be used for
PHP connections. I had to send a "SET NAMES utf8" upon connection to
really convince MySQL to use utf8 for the connection.

This really sucks, off course. It is plain stupid to have to set the
encoding used encoded in the encoding it has to set. It is like sending
a key INSIDE a safe which requires that key to open it.

Best regards,
--
Willem Bogaerts

Application smith
Kratz B.V.
http://www.kratz.nl/
  Réponse avec citation
Vieux 04/04/2008, 18h58   #9
Michael Fesser
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: Mysql database in UTF8, PHP shows latin1 (iso-8859-1)

..oO(Willem Bogaerts)

>> it seems a php problem as when i execute "show variables" in an mysql
>> console i get:
>>
>> character_set_client=utf8
>>
>> but from php i get:
>>
>> character_set_client=latin1

>
>That is a problem I also had. the [mysql] section of my.cnf is for the
>command-line client only. A [client] section may or may not be used for
>PHP connections. I had to send a "SET NAMES utf8" upon connection to
>really convince MySQL to use utf8 for the connection.


That's how it's supposed to be and was already mentioned multiple times.
How else should MySQL know what connection encoding the PHP client and
your scripts prefer?

>This really sucks, off course. It is plain stupid to have to set the
>encoding used encoded in the encoding it has to set. It is like sending
>a key INSIDE a safe which requires that key to open it.


You connect to the DB using the default encoding and then set it to
whatever you want it to be. There's nothing stupid about that.

Micha
  Réponse avec citation
Vieux 05/04/2008, 16h32   #10
Juliette
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: Mysql database in UTF8, PHP shows latin1 (iso-8859-1)

alex wrote:
> En/na Jerry Stuckle ha escrit:
>
>>
>> Check Micha's comment again:
>>
>> "...and PHP has to send a correct HTTP header back to the browser."
>>
>> The dataset connection and charset have nothing to do with the charset
>> sent in the page header. You can set the correct charset for the page
>> in your Apache server or in PHP.

>
>
> It's not a http header problem as i have in my script:
>
> <?php header("Content-type: text/html; charset=utf-8"); ?>
>
> it seems a php problem as when i execute "show variables" in an mysql
> console i get:
>
> character_set_client=utf8
>
> but from php i get:
>
> character_set_client=latin1
>
> when the default character set is utf8 (in my.cnf) and i have not
> configured it for latin1 anywhere.
>
> I've got 2 more apps one in java and the another one in .Net. None of
> those had to be modified in order to retrieve the results. But PHP needs
> the "set names utf8" in order to get the proper encoding.


Have a look here for a good explanation:
http://www.adviesenzo.nl/examples/ph...l_charset_fix/
  Réponse avec citation
Vieux 08/04/2008, 11h57   #11
Willem Bogaerts
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: Mysql database in UTF8, PHP shows latin1 (iso-8859-1)

>>> character_set_client=latin1
>> That is a problem I also had. the [mysql] section of my.cnf is for the
>> command-line client only. A [client] section may or may not be used for
>> PHP connections. I had to send a "SET NAMES utf8" upon connection to
>> really convince MySQL to use utf8 for the connection.

>
> That's how it's supposed to be and was already mentioned multiple times.
> How else should MySQL know what connection encoding the PHP client and
> your scripts prefer?


You should either be able to configure it reliably OR have a default
encoding. The way it is now, this is not the case. If you send an SQL
file through the command-line client, the default encoding can be
DIFFERENT from the situation where you send the exact same file through
PHP. That is the problem here. The whole command "SET NAMES utf8" is not
even legible if the encoding is set to ucs-2. That is why that encoding
is not possible in MySQL.

Off course, the default encoding should be passed in the connection. Can
you tell me what the default encoding is when connecting? According to
the manual, any "language character" can be used to use for a database
name. So mysql_select_db() will not use latin-1, as you would not be
able to refer to your database. Or is it? I could not find it anywhere.

>
>> This really sucks, off course. It is plain stupid to have to set the
>> encoding used encoded in the encoding it has to set. It is like sending
>> a key INSIDE a safe which requires that key to open it.

>
> You connect to the DB using the default encoding and then set it to
> whatever you want it to be. There's nothing stupid about that.
>
> Micha


The problem with that, off course, is that this is highly vendor,
version AND client-specific. The command-line client behaves differently
than a PHP initiated connection if you do not send it. Now that was the
exact problem of the original poster. And older database versions do not
even understand it.

Best regards,
--
Willem Bogaerts

Application smith
Kratz B.V.
http://www.kratz.nl/
  Réponse avec citation
Vieux 08/04/2008, 14h01   #12
Peter H. Coffin
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: Mysql database in UTF8, PHP shows latin1 (iso-8859-1)

On Tue, 08 Apr 2008 12:57:29 +0200, Willem Bogaerts wrote:
>>>> character_set_client=latin1
>>> That is a problem I also had. the [mysql] section of my.cnf is for the
>>> command-line client only. A [client] section may or may not be used for
>>> PHP connections. I had to send a "SET NAMES utf8" upon connection to
>>> really convince MySQL to use utf8 for the connection.

>>
>> That's how it's supposed to be and was already mentioned multiple times.
>> How else should MySQL know what connection encoding the PHP client and
>> your scripts prefer?

>
> You should either be able to configure it reliably OR have a default
> encoding. The way it is now, this is not the case. If you send an SQL
> file through the command-line client, the default encoding can be
> DIFFERENT from the situation where you send the exact same file through
> PHP. That is the problem here. The whole command "SET NAMES utf8" is not
> even legible if the encoding is set to ucs-2. That is why that
> encoding is not possible in MySQL.


Don't be silly. ucs2, utf16 and utf32 cannot be used for SET NAMES or SET
CHARACTER SET. It's in the manual, in the section about connection
charsets. You DID read that section, didn't you, before complaining that
connection charsets make no sense?

> Off course, the default encoding should be passed in the connection.
> Can you tell me what the default encoding is when connecting?
> According to the manual, any "language character" can be used to use
> for a database name. So mysql_select_db() will not use latin-1, as you
> would not be able to refer to your database. Or is it? I could not
> find it anywhere.


It's whatever you use on the --default-character-set=charset_name
option, or in the my.cnf file, or latin-1, in that order. This is a lot
less hard if you try reading and knowing the documentation that
accompanies your installation.

>>> This really sucks, off course. It is plain stupid to have to set
>>> the encoding used encoded in the encoding it has to set. It is like
>>> sending a key INSIDE a safe which requires that key to open it.

>>
>> You connect to the DB using the default encoding and then set it to
>> whatever you want it to be. There's nothing stupid about that.
>>
>> Micha

>
> The problem with that, off course, is that this is highly vendor,
> version AND client-specific. The command-line client behaves
> differently than a PHP initiated connection if you do not send it.


That's why you send it, whenever you are unsure of what it is currently
set to. This is as ridiculous as complaining about having to explicitly
open a connection to mysql in PHP as well, and feeling hurt that you
have to specify which database you want to use. "Why not have a sensible
default database and just use that?!?"

> Now that was the exact problem of the original poster. And older
> database versions do not even understand it.


How old a database do you HAVE? The first note on the connection charset
page in the online manual is from 2004.

--
The Web brings people together because no matter what kind of a twisted
sexual mutant you happen to be, you've got millions of pals out there.
Type in 'Find people that have sex with goats that are on fire' and the
computer will ask, 'Specify type of goat.' -- Rich Jeni
  Réponse avec citation
Vieux 08/06/2008, 20h06   #13
Marc
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Mysql database in UTF8, PHP shoud show latin1, but it doesn't

alex schrieb:
>
> I made a simple script in PHP to dump data from tables which had non
> standard characters. But the resulting page is viewed correctly in
> iso-8859-1 encoding and not in UTF-8.
>
> At this moment i'm clueless were the problem lies.


Hello,

well, first of all, I'm newbie with MYSQL & Co., I have read all answers
and followed the link reading them all carefully. I suppose I understand
the matter.

I have apparently the same problem as Alex has. But my connection is in
UTF-8 and I need ISO-8859-1.

The problem accrued as I've moved from my webspace to a vServer.

The old configuration shown by phpMyAdmin on MySQL 4.1.13 is:

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

The new configuration shown by phpMyAdmin on my new MySQL 5.0.32 is
exactly the same, the I set "SET NAMES latin1" via mysql-shell.

BUT:

Making "SHOW VARIABLES" at mysql-shell gives:

character_set_client latin1
character_set_connection latin1
character_set_database latin1
character_set_filesystem binary
character set results latin1
character set server latin1
character set system utf8
collation connection latin1_swedish_ci
collation database latin1_swedish_ci
collation server latin1_swedish_ci

asking for the values by PHP gives:

character_set_client utf8
character_set_connection utf8
character_set_database latin1
character_set_filesystem binary
character_set_results utf8
character_set_server latin1
character_set_system utf8
collation_connection utf8_general_ci
collation_database latin1_swedish_ci
collation_server latin1_swedish_ci

I need the character_set_client and character_set_connection in latin1.

The HTTP header sends to the browser ISO-8859-15. That should stay so,
because about 2.000 html pages are coded in this. I don't care for the
DB contect, then I have it local in some programm. My only wish is to
establish a working-encoding-connection between the PHP and DB.

Can You please tell what exactly I have to do? Please, understand I
can't reprogramm the application, I even don't want to, because it
worked before. I'm quit sure it's not correct setted up.

Thanks a lot in advance!!!

Regards

Marc
  Réponse avec citation
Vieux 08/06/2008, 20h09   #14
Marc
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: Mysql database in UTF8, PHP shoud show latin1, but it doesn't

I'm sorry, I should mention, I use:

Debian Etch stable
Apache2
PHP 5
  Réponse avec citation
Vieux 08/06/2008, 20h24   #15
Jerry Stuckle
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: Mysql database in UTF8, PHP shoud show latin1, but it doesn't

Marc wrote:
> alex schrieb:
>>
>> I made a simple script in PHP to dump data from tables which had non
>> standard characters. But the resulting page is viewed correctly in
>> iso-8859-1 encoding and not in UTF-8.
>>
>> At this moment i'm clueless were the problem lies.

>
> Hello,
>
> well, first of all, I'm newbie with MYSQL & Co., I have read all answers
> and followed the link reading them all carefully. I suppose I understand
> the matter.
>
> I have apparently the same problem as Alex has. But my connection is in
> UTF-8 and I need ISO-8859-1.
>
> The problem accrued as I've moved from my webspace to a vServer.
>
> The old configuration shown by phpMyAdmin on MySQL 4.1.13 is:
>
> character set client utf8
> (Globaler Wert) latin1
> character set connection utf8
> (Globaler Wert) latin1
> character set database latin1
> character set results utf8
> (Globaler Wert) latin1
> character set server latin1
> character set system utf8
> collation connection utf8_general_ci
> (Globaler Wert) latin1_swedish_ci
> collation database latin1_swedish_ci
> collation server latin1_swedish_ci
>
> The new configuration shown by phpMyAdmin on my new MySQL 5.0.32 is
> exactly the same, the I set "SET NAMES latin1" via mysql-shell.
>
> BUT:
>
> Making "SHOW VARIABLES" at mysql-shell gives:
>
> character_set_client latin1
> character_set_connection latin1
> character_set_database latin1
> character_set_filesystem binary
> character set results latin1
> character set server latin1
> character set system utf8
> collation connection latin1_swedish_ci
> collation database latin1_swedish_ci
> collation server latin1_swedish_ci
>
> asking for the values by PHP gives:
>
> character_set_client utf8
> character_set_connection utf8
> character_set_database latin1
> character_set_filesystem binary
> character_set_results utf8
> character_set_server latin1
> character_set_system utf8
> collation_connection utf8_general_ci
> collation_database latin1_swedish_ci
> collation_server latin1_swedish_ci
>
> I need the character_set_client and character_set_connection in latin1.
>
> The HTTP header sends to the browser ISO-8859-15. That should stay so,
> because about 2.000 html pages are coded in this. I don't care for the
> DB contect, then I have it local in some programm. My only wish is to
> establish a working-encoding-connection between the PHP and DB.
>
> Can You please tell what exactly I have to do? Please, understand I
> can't reprogramm the application, I even don't want to, because it
> worked before. I'm quit sure it's not correct setted up.
>
> Thanks a lot in advance!!!
>
> Regards
>
> Marc
>


Marc,

Look at the differences in your settings. Then look at the fact these
are MySQL settings, not PHP. And look at the questions you're asking -
about the character set in the connection and client.

These are all MySQL items - which should be a clue that you should be
asking in comp.databases.mysql, not here.


--
==================
Remove the "x" from my email address
Jerry Stuckle
JDS Computer Training Corp.
jstucklex@attglobal.net
==================

  Réponse avec citation
Vieux 08/06/2008, 20h37   #16
Jerry Stuckle
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: Mysql database in UTF8, PHP shoud show latin1, but it doesn't

Marc wrote:
> alex schrieb:
>>
>> I made a simple script in PHP to dump data from tables which had non
>> standard characters. But the resulting page is viewed correctly in
>> iso-8859-1 encoding and not in UTF-8.
>>
>> At this moment i'm clueless were the problem lies.

>
> Hello,
>
> well, first of all, I'm newbie with MYSQL & Co., I have read all answers
> and followed the link reading them all carefully. I suppose I understand
> the matter.
>
> I have apparently the same problem as Alex has. But my connection is in
> UTF-8 and I need ISO-8859-1.
>
> The problem accrued as I've moved from my webspace to a vServer.
>
> The old configuration shown by phpMyAdmin on MySQL 4.1.13 is:
>
> character set client utf8
> (Globaler Wert) latin1
> character set connection utf8
> (Globaler Wert) latin1
> character set database latin1
> character set results utf8
> (Globaler Wert) latin1
> character set server latin1
> character set system utf8
> collation connection utf8_general_ci
> (Globaler Wert) latin1_swedish_ci
> collation database latin1_swedish_ci
> collation server latin1_swedish_ci
>
> The new configuration shown by phpMyAdmin on my new MySQL 5.0.32 is
> exactly the same, the I set "SET NAMES latin1" via mysql-shell.
>
> BUT:
>
> Making "SHOW VARIABLES" at mysql-shell gives:
>
> character_set_client latin1
> character_set_connection latin1
> character_set_database latin1
> character_set_filesystem binary
> character set results latin1
> character set server latin1
> character set system utf8
> collation connection latin1_swedish_ci
> collation database latin1_swedish_ci
> collation server latin1_swedish_ci
>
> asking for the values by PHP gives:
>
> character_set_client utf8
> character_set_connection utf8
> character_set_database latin1
> character_set_filesystem binary
> character_set_results utf8
> character_set_server latin1
> character_set_system utf8
> collation_connection utf8_general_ci
> collation_database latin1_swedish_ci
> collation_server latin1_swedish_ci
>
> I need the character_set_client and character_set_connection in latin1.
>
> The HTTP header sends to the browser ISO-8859-15. That should stay so,
> because about 2.000 html pages are coded in this. I don't care for the
> DB contect, then I have it local in some programm. My only wish is to
> establish a working-encoding-connection between the PHP and DB.
>
> Can You please tell what exactly I have to do? Please, understand I
> can't reprogramm the application, I even don't want to, because it
> worked before. I'm quit sure it's not correct setted up.
>
> Thanks a lot in advance!!!
>
> Regards
>
> Marc
>


Oops, I didn't notice you crossposted this to comp.databases.mysql.

You indicated you had "non-standard" characters in the database. The
first question is - what charset is the data in the database in? And
exactly what are these "non-standard" characters?

--
==================
Remove the "x" from my email address
Jerry Stuckle
JDS Computer Training Corp.
jstucklex@attglobal.net
==================

  Réponse avec citation
Vieux 08/06/2008, 21h04   #17
AnrDaemon
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: Mysql database in UTF8, PHP shoud show latin1, but it doesn't

Greetings, Marc.
In reply to Your message dated Sunday, June 8, 2008, 23:06:35,

>> I made a simple script in PHP to dump data from tables which had non
>> standard characters. But the resulting page is viewed correctly in
>> iso-8859-1 encoding and not in UTF-8.
>>
>> At this moment i'm clueless were the problem lies.


> Hello,


> well, first of all, I'm newbie with MYSQL & Co., I have read all answers
> and followed the link reading them all carefully. I suppose I understand
> the matter.


> I have apparently the same problem as Alex has. But my connection is in
> UTF-8 and I need ISO-8859-1.


> The problem accrued as I've moved from my webspace to a vServer.


> The old configuration shown by phpMyAdmin on MySQL 4.1.13 is:


> character set client utf8
> (Globaler Wert) latin1
> character set connection utf8
> (Globaler Wert) latin1
> character set database latin1
> character set results utf8
> (Globaler Wert) latin1
> character set server latin1
> character set system utf8
> collation connection utf8_general_ci
> (Globaler Wert) latin1_swedish_ci
> collation database latin1_swedish_ci
> collation server latin1_swedish_ci


> The new configuration shown by phpMyAdmin on my new MySQL 5.0.32 is
> exactly the same, the I set "SET NAMES latin1" via mysql-shell.


> BUT:


> Making "SHOW VARIABLES" at mysql-shell gives:


> character_set_client latin1
> character_set_connection latin1
> character_set_database latin1
> character_set_filesystem binary
> character set results latin1
> character set server latin1
> character set system utf8
> collation connection latin1_swedish_ci
> collation database latin1_swedish_ci
> collation server latin1_swedish_ci


> asking for the values by PHP gives:


> character_set_client utf8
> character_set_connection utf8
> character_set_database latin1
> character_set_filesystem binary
> character_set_results utf8
> character_set_server latin1
> character_set_system utf8
> collation_connection utf8_general_ci
> collation_database latin1_swedish_ci
> collation_server latin1_swedish_ci


> I need the character_set_client and character_set_connection in latin1.


> The HTTP header sends to the browser ISO-8859-15. That should stay so,
> because about 2.000 html pages are coded in this. I don't care for the
> DB contect, then I have it local in some programm. My only wish is to
> establish a working-encoding-connection between the PHP and DB.


> Can You please tell what exactly I have to do? Please, understand I
> can't reprogramm the application, I even don't want to, because it
> worked before. I'm quit sure it's not correct setted up.


You have the answer, but apparently lost it in your explanation. I'll quote:

> The new configuration shown by phpMyAdmin on my new MySQL 5.0.32 is
> exactly the same, the I set "SET NAMES latin1" via mysql-shell.


You must tell to server, what encoding you want, every time you connecting to
database.
Just add execution of 'SET NAMES latin1 COLLATE whatever_collation_you_need'
statement right after the moment you have connected to database in your script.

P.S.
I've read somewhere that it is possible to configure MySQL user to have
specific encoding/collation without recompiling whole server/playing with
variables every time user connecting to the server.
But I've lost that manual or sumply misread it.
All I can remember for now, it is something like
CREATE USER 'user' WITH CHARACTER SET charset;

Can anyone confirm it or tell more about it?


--
Sincerely Yours, AnrDaemon <anrdaemon@freemail.ru>

  Réponse avec citation
Vieux 09/06/2008, 16h17   #18
Marc
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: Mysql database in UTF8, PHP shoud show latin1, but it doesn't

Jerry Stuckle schrieb:
> Marc wrote:
>> alex schrieb:
>>>
>>> I made a simple script in PHP to dump data from tables which had non
>>> standard characters. But the resulting page is viewed correctly in
>>> iso-8859-1 encoding and not in UTF-8.
>>>
>>> At this moment i'm clueless were the problem lies.

>>
>> Hello,
>>
>> well, first of all, I'm newbie with MYSQL & Co., I have read all
>> answers and followed the link reading them all carefully. I suppose I
>> understand the matter.
>>
>> I have apparently the same problem as Alex has. But my connection is
>> in UTF-8 and I need ISO-8859-1.
>>
>> The problem accrued as I've moved from my webspace to a vServer.
>>
>> The old configuration shown by phpMyAdmin on MySQL 4.1.13 is:
>>
>> character set client utf8
>> (Globaler Wert) latin1
>> character set connection utf8
>> (Globaler Wert) latin1
>> character set database latin1
>> character set results utf8
>> (Globaler Wert) latin1
>> character set server latin1
>> character set system utf8
>> collation connection utf8_general_ci
>> (Globaler Wert) latin1_swedish_ci
>> collation database latin1_swedish_ci
>> collation server latin1_swedish_ci
>>
>> The new configuration shown by phpMyAdmin on my new MySQL 5.0.32 is
>> exactly the same, the I set "SET NAMES latin1" via mysql-shell.
>>
>> BUT:
>>
>> Making "SHOW VARIABLES" at mysql-shell gives:
>>
>> character_set_client latin1
>> character_set_connection latin1
>> character_set_database latin1
>> character_set_filesystem binary
>> character set results latin1
>> character set server latin1
>> character set system utf8
>> collation connection latin1_swedish_ci
>> collation database latin1_swedish_ci
>> collation server latin1_swedish_ci
>>
>> asking for the values by PHP gives:
>>
>> character_set_client utf8
>> character_set_connection utf8
>> character_set_database latin1
>> character_set_filesystem binary
>> character_set_results utf8
>> character_set_server latin1
>> character_set_system utf8
>> collation_connection utf8_general_ci
>> collation_database latin1_swedish_ci
>> collation_server latin1_swedish_ci
>>
>> I need the character_set_client and character_set_connection in latin1.
>>
>> The HTTP header sends to the browser ISO-8859-15. That should stay so,
>> because about 2.000 html pages are coded in this. I don't care for the
>> DB contect, then I have it local in some programm. My only wish is to
>> establish a working-encoding-connection between the PHP and DB.
>>
>> Can You please tell what exactly I have to do? Please, understand I
>> can't reprogramm the application, I even don't want to, because it
>> worked before. I'm quit sure it's not correct setted up.
>>
>> Thanks a lot in advance!!!
>>
>> Regards
>>
>> Marc
>>

>
> Oops, I didn't notice you crossposted this to comp.databases.mysql.
>
> You indicated you had "non-standard" characters in the database. The
> first question is - what charset is the data in the database in? And
> exactly what are these "non-standard" characters?
>


Hello Jerry,

sorry for crossposting. I think it's not only MYSQL problem, but also
PHP problem.

I have German umlauts in there. I guess the old DB used latin1 and the
new one uses UTF-8 for internal corresponding.

As I have found it, it acctually doesn't matter how the DB corresponds
internal, then it's able to encode by request sent by client. And that's
the point, I guess PHP doesn't say which encoding it would like to use.
Or maybe it's enough to tell DB which encoding it should normally use
talking to anything from outside.

Right?

So, I'm sorry for crossposting but I guess it's a mysql-php-problem.

Thanks a lot for Your responce.


Regards,

Marc
  Réponse avec citation
Vieux 09/06/2008, 16h31   #19
Marc
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: Mysql database in UTF8, PHP shoud show latin1, but it doesn't

Hello AnrDaemon,

AnrDaemon schrieb:
> Greetings, Marc.
> In reply to Your message dated Sunday, June 8, 2008, 23:06:35,
>
>>> I made a simple script in PHP to dump data from tables which had non
>>> standard characters. But the resulting page is viewed correctly in
>>> iso-8859-1 encoding and not in UTF-8.
>>>
>>> At this moment i'm clueless were the problem lies.

>
>> Hello,

>
>> well, first of all, I'm newbie with MYSQL & Co., I have read all answers
>> and followed the link reading them all carefully. I suppose I understand
>> the matter.

>
>> I have apparently the same problem as Alex has. But my connection is in
>> UTF-8 and I need ISO-8859-1.

>
>> The problem accrued as I've moved from my webspace to a vServer.

>
>> The old configuration shown by phpMyAdmin on MySQL 4.1.13 is:

>
>> character set client utf8
>> (Globaler Wert) latin1
>> character set connection utf8
>> (Globaler Wert) latin1
>> character set database latin1
>> character set results utf8
>> (Globaler Wert) latin1
>> character set server latin1
>> character set system utf8
>> collation connection utf8_general_ci
>> (Globaler Wert) latin1_swedish_ci
>> collation database latin1_swedish_ci
>> collation server latin1_swedish_ci

>
>> The new configuration shown by phpMyAdmin on my new MySQL 5.0.32 is
>> exactly the same, the I set "SET NAMES latin1" via mysql-shell.

>
>> BUT:

>
>> Making "SHOW VARIABLES" at mysql-shell gives:

>
>> character_set_client latin1
>> character_set_connection latin1
>> character_set_database latin1
>> character_set_filesystem binary
>> character set results latin1
>> character set server latin1
>> character set system utf8
>> collation connection latin1_swedish_ci
>> collation database latin1_swedish_ci
>> collation server latin1_swedish_ci

>
>> asking for the values by PHP gives:

>
>> character_set_client utf8
>> character_set_connection utf8
>> character_set_database latin1
>> character_set_filesystem binary
>> character_set_results utf8
>> character_set_server latin1
>> character_set_system utf8
>> collation_connection utf8_general_ci
>> collation_database latin1_swedish_ci
>> collation_server latin1_swedish_ci

>
>> I need the character_set_client and character_set_connection in latin1.

>
>> The HTTP header sends to the browser ISO-8859-15. That should stay so,
>> because about 2.000 html pages are coded in this. I don't care for the
>> DB contect, then I have it local in some programm. My only wish is to
>> establish a working-encoding-connection between the PHP and DB.

>
>> Can You please tell what exactly I have to do? Please, understand I
>> can't reprogramm the application, I even don't want to, because it
>> worked before. I'm quit sure it's not correct setted up.

>
> You have the answer, but apparently lost it in your explanation. I'll quote:
>
>> The new configuration shown by phpMyAdmin on my new MySQL 5.0.32 is
>> exactly the same, the I set "SET NAMES latin1" via mysql-shell.

>
> You must tell to server, what encoding you want, every time you connecting to
> database.
> Just add execution of 'SET NAMES latin1 COLLATE whatever_collation_you_need'
> statement right after the moment you have connected to database in your script.


thanks a lot for this advice. But it's not possible to change the whole
project for this. That's why I would like to set it generally up. On the
other side, I don't need any other encoding.

>
> P.S.
> I've read somewhere that it is possible to configure MySQL user to have
> specific encoding/collation without recompiling whole server/playing with
> variables every time user connecting to the server.
> But I've lost that manual or sumply misread it.
> All I can remember for now, it is something like
> CREATE USER 'user' WITH CHARACTER SET charset;
>
> Can anyone confirm it or tell more about it?
>
>


I have read somewhere it should be necessary to recompile the whole
server... well, I have no idea about it yet.

I'm gonna look around for any advice for configuring MySQL user to have
specific encoding.

But still, isn't it possible to make general settings for this??

Thanks a lot for Your hints.

Regards,

Marc
  Réponse avec citation
Vieux 09/06/2008, 17h27   #20
AnrDaemon
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: Mysql database in UTF8, PHP shoud show latin1, but it doesn't

Greetings, Marc.
In reply to Your message dated Monday, June 9, 2008, 19:31:01,

>> You have the answer, but apparently lost it in your explanation. I'll quote:
>>
>>> The new configuration shown by phpMyAdmin on my new MySQL 5.0.32 is
>>> exactly the same, the I set "SET NAMES latin1" via mysql-shell.

>>
>> You must tell to server, what encoding you want, every time you connecting to
>> database.
>> Just add execution of 'SET NAMES latin1 COLLATE whatever_collation_you_need'
>> statement right after the moment you have connected to database in your script.


> thanks a lot for this advice. But it's not possible to change the whole
> project for this. That's why I would like to set it generally up. On the
> other side, I don't need any other encoding.


You lost the point.
It is not "changing the whole project", it is the action that project must do
once in only one script - one that establishing connection to database.
It is, literally, one line of code to add to whole your project, and it will
serve you to the end of times.


--
Sincerely Yours, AnrDaemon <anrdaemon@freemail.ru>

  Réponse avec citation
Vieux 09/06/2008, 17h45   #21
Jerry Stuckle
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: Mysql database in UTF8, PHP shoud show latin1, but it doesn't

Marc wrote:
> Jerry Stuckle schrieb:
>> Marc wrote:
>>> alex schrieb:
>>>>
>>>> I made a simple script in PHP to dump data from tables which had non
>>>> standard characters. But the resulting page is viewed correctly in
>>>> iso-8859-1 encoding and not in UTF-8.
>>>>
>>>> At this moment i'm clueless were the problem lies.
>>>
>>> Hello,
>>>
>>> well, first of all, I'm newbie with MYSQL & Co., I have read all
>>> answers and followed the link reading them all carefully. I suppose I
>>> understand the matter.
>>>
>>> I have apparently the same problem as Alex has. But my connection is
>>> in UTF-8 and I need ISO-8859-1.
>>>
>>> The problem accrued as I've moved from my webspace to a vServer.
>>>
>>> The old configuration shown by phpMyAdmin on MySQL 4.1.13 is:
>>>
>>> character set client utf8
>>> (Globaler Wert) latin1
>>> character set connection utf8
>>> (Globaler Wert) latin1
>>> character set database latin1
>>> character set results utf8
>>> (Globaler Wert) latin1
>>> character set server latin1
>>> character set system utf8
>>> collation connection utf8_general_ci
>>> (Globaler Wert) latin1_swedish_ci
>>> collation database latin1_swedish_ci
>>> collation server latin1_swedish_ci
>>>
>>> The new configuration shown by phpMyAdmin on my new MySQL 5.0.32 is
>>> exactly the same, the I set "SET NAMES latin1" via mysql-shell.
>>>
>>> BUT:
>>>
>>> Making "SHOW VARIABLES" at mysql-shell gives:
>>>
>>> character_set_client latin1
>>> character_set_connection latin1
>>> character_set_database latin1
>>> character_set_filesystem binary
>>> character set results latin1
>>> character set server latin1
>>> character set system utf8
>>> collation connection latin1_swedish_ci
>>> collation database latin1_swedish_ci
>>> collation server latin1_swedish_ci
>>>
>>> asking for the values by PHP gives:
>>>
>>> character_set_client utf8
>>> character_set_connection utf8
>>> character_set_database latin1
>>> character_set_filesystem binary
>>> character_set_results utf8
>>> character_set_server latin1
>>> character_set_system utf8
>>> collation_connection utf8_general_ci
>>> collation_database latin1_swedish_ci
>