marib
Новичок
Проблема со странными закарючками в text филдах mysql. Unicode, но не всё так просто.
Всем привет!
После многодневных попыток решить данную проблему, обращаюсь за помощью.
Описание работы скрипта:
php скрипт тянет страницы с других сайтов, отбирает нужные данные и сохраняет в mysql таблицу. Кодировка страниц на других сайтах utf8, текст чистая латиница без примесей.
Дамп mysql таблицы:
CREATE TABLE `table1` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
`log_date` date NOT NULL,
`log_time` time NOT NULL,
`current_status` tinyint(1) NOT NULL,
`field1` varchar(255) NOT NULL,
`field2` varchar(255) NOT NULL,
`textfield1` text NOT NULL,
`textfield2` text NOT NULL,
`textfield3` text NOT NULL,
`textfield4` text NOT NULL,
`textfield5` text NOT NULL,
`textfield6` text NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `field2` (`field2`)
) ENGINE=MyISAM CHARACTER SET utf8;
Алгоритм работы:
После подключения к базе производится следующий набор действий:
mysql_query("SET NAMES 'utf8';", $host);
или
mysql_set_charset('utf8', $host);
(пробовал оба варианта, они идентичны).
для проверки, привожу дамп переменных мускула после вышеозначенной команды:
character_set_client = utf8
character_set_connection = utf8
character_set_database = utf8
character_set_results = utf8
character_set_server = latin1
character_set_system = utf8
character_set_filesystem = binary (это может и лишнее)
далее, посылаю запрос к базе:
$sql = "INSERT INTO table1 VALUES \n";
foreach($сontent as $key => $value)
$sql .= "(NULL, CURDATE(), CURTIME(), 1, 'field1Value', '".mysql_real_escape_string($key)."', '".mysql_real_escape_string($value['textfield1Value'])."', '".mysql_real_escape_string($value['textfield2Value'])."', '".mysql_real_escape_string($value['textfield3Value'])."', '".mysql_real_escape_string($value['textfield4Value'])."', '".mysql_real_escape_string($value['textfield5Value'])."', '".mysql_real_escape_string($value['textfield6Value'])."'),\n";
$sql = rtrim($sql, ",\n");
$sql .= "\n ON DUPLICATE KEY UPDATE log_date = CURDATE(), log_time = CURTIME(), textfield1 = VALUES(textfield1), textfield2 = VALUES(textfield2), textfield3 = VALUES(textfield3), textfield4 = VALUES(textfield4), textfield5 = VALUES(textfield5), textfield6 = VALUES(textfield6)";
mysql_query($sql, $host);
Описание проблемы:
Скрипт до определённого момента работает корректно, записи в мускул производятся как надо. Но на каком-то этапе происходит "срыв" и записи в text филдах делаются с ошибками. В частности, первые несколько символов пишутся закарючками, остальные как надо:
textfield1 = "�������ers for Women on Family, Health, Beauty, Style, Home and More!"
textfield2 = " ;f�����s, Dating, Tattoos, Skincare, Hair, Engagement Rings, Kids, Teens, Video Games, Dogs, Baby, Makeup, Garden, Business, Shoes, Swimwear, Lingerie, Jewelry, Saving Money"
textfield3 = "�R̒����growing community of over 6 Million women looking for expert advice on over 80 topics, including family, home, style, health, beauty, travel, entertainment and more."
textfield4 = "�����eopedia.org/Main_Page"
textfield5 = "�����eopedia.org/Main_Page"
textfield6 = " ]Ē����12:"probable";s:27:"Answers for Women on Family";s:4:"se";a:2:{i:0;i:1;i:1;i:3;}s:7:"re";s:11:"141,000,000";}}"
Прошу заметить, что varchar-ы пишутся корректно и проблема касается только text филдов.
Всем привет!
После многодневных попыток решить данную проблему, обращаюсь за помощью.
Описание работы скрипта:
php скрипт тянет страницы с других сайтов, отбирает нужные данные и сохраняет в mysql таблицу. Кодировка страниц на других сайтах utf8, текст чистая латиница без примесей.
Дамп mysql таблицы:
CREATE TABLE `table1` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
`log_date` date NOT NULL,
`log_time` time NOT NULL,
`current_status` tinyint(1) NOT NULL,
`field1` varchar(255) NOT NULL,
`field2` varchar(255) NOT NULL,
`textfield1` text NOT NULL,
`textfield2` text NOT NULL,
`textfield3` text NOT NULL,
`textfield4` text NOT NULL,
`textfield5` text NOT NULL,
`textfield6` text NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `field2` (`field2`)
) ENGINE=MyISAM CHARACTER SET utf8;
Алгоритм работы:
После подключения к базе производится следующий набор действий:
mysql_query("SET NAMES 'utf8';", $host);
или
mysql_set_charset('utf8', $host);
(пробовал оба варианта, они идентичны).
для проверки, привожу дамп переменных мускула после вышеозначенной команды:
character_set_client = utf8
character_set_connection = utf8
character_set_database = utf8
character_set_results = utf8
character_set_server = latin1
character_set_system = utf8
character_set_filesystem = binary (это может и лишнее)
далее, посылаю запрос к базе:
$sql = "INSERT INTO table1 VALUES \n";
foreach($сontent as $key => $value)
$sql .= "(NULL, CURDATE(), CURTIME(), 1, 'field1Value', '".mysql_real_escape_string($key)."', '".mysql_real_escape_string($value['textfield1Value'])."', '".mysql_real_escape_string($value['textfield2Value'])."', '".mysql_real_escape_string($value['textfield3Value'])."', '".mysql_real_escape_string($value['textfield4Value'])."', '".mysql_real_escape_string($value['textfield5Value'])."', '".mysql_real_escape_string($value['textfield6Value'])."'),\n";
$sql = rtrim($sql, ",\n");
$sql .= "\n ON DUPLICATE KEY UPDATE log_date = CURDATE(), log_time = CURTIME(), textfield1 = VALUES(textfield1), textfield2 = VALUES(textfield2), textfield3 = VALUES(textfield3), textfield4 = VALUES(textfield4), textfield5 = VALUES(textfield5), textfield6 = VALUES(textfield6)";
mysql_query($sql, $host);
Описание проблемы:
Скрипт до определённого момента работает корректно, записи в мускул производятся как надо. Но на каком-то этапе происходит "срыв" и записи в text филдах делаются с ошибками. В частности, первые несколько символов пишутся закарючками, остальные как надо:
textfield1 = "�������ers for Women on Family, Health, Beauty, Style, Home and More!"
textfield2 = " ;f�����s, Dating, Tattoos, Skincare, Hair, Engagement Rings, Kids, Teens, Video Games, Dogs, Baby, Makeup, Garden, Business, Shoes, Swimwear, Lingerie, Jewelry, Saving Money"
textfield3 = "�R̒����growing community of over 6 Million women looking for expert advice on over 80 topics, including family, home, style, health, beauty, travel, entertainment and more."
textfield4 = "�����eopedia.org/Main_Page"
textfield5 = "�����eopedia.org/Main_Page"
textfield6 = " ]Ē����12:"probable";s:27:"Answers for Women on Family";s:4:"se";a:2:{i:0;i:1;i:1;i:3;}s:7:"re";s:11:"141,000,000";}}"
Прошу заметить, что varchar-ы пишутся корректно и проблема касается только text филдов.