开发者

Trouble with encondig in Mysql

开发者 https://www.devze.com 2023-03-03 19:00 出处:网络
I have the next table: CREATE TABLE IF NOT EXISTS `applications` ( `id` int(11) NOT NULL AUTO_INCREMENT,

I have the next table:

CREATE TABLE IF NOT EXISTS `applications` (
    `id` int(11) NOT NULL AUTO_INCREMENT,
    `name` varchar(45) COLLATE utf8_unicode_ci DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

I want to st开发者_高级运维ore the value "España" in the "name" field.

I have a PHP FILE (encoded in UTF8) with a form to save that. When i save "España" using the php file and i read from mysql with php i see the data ok.

But if a go to PMA o Mysql Query Browser i see this: "España"

If i save it from PMA (with encoding set to UTF-8 ) or mysql query browser i see ok on that two tools, but i see "Espa�a" from PHP.

I dont understand why.

In bytes:

If is saved from PHP i see: C3 83 C2 B1 (for ñ)

If is saved from MQB or PMA i see: C3 B1 (for ñ)


Run mysql_set_charset() before executing queries on the open connection.

mysql_set_charset("UTF-8");


The problem was the php mysql client. It uses latin1 as encoding for the connection, you can see this with:

echo mysql_client_encoding($con);

or

print_r(mysql_fetch_assoc(mysql_query("show variables like 'char%';")));

There is two ways to solve this:

mysql_set_charset("utf8");

or

mysql_query("SET CHARACTER SET 'UTF8'", $con); // data send by the server
mysql_query("SET NAMES 'UTF8'", $con); // data send by the client
0

精彩评论

暂无评论...
验证码 换一张
取 消