<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[Форум PHP-MyAdmin.RU &mdash; Что-то непонятное с кодировками]]></title>
	<link rel="self" href="https://forum.php-myadmin.ru/extern.php?action=feed&amp;tid=1262&amp;type=atom" />
	<updated>2009-06-09T11:40:17Z</updated>
	<generator>PunBB</generator>
	<id>https://forum.php-myadmin.ru/viewtopic.php?id=1262</id>
		<entry>
			<title type="html"><![CDATA[Re: Что-то непонятное с кодировками]]></title>
			<link rel="alternate" href="https://forum.php-myadmin.ru/viewtopic.php?pid=8382#p8382" />
			<content type="html"><![CDATA[<p><strong>Shopen</strong><br />Бинарные данные объединяются как есть, то есть в каком бы виде они не были, просто присоединяются байты, кодировки в расчет не принимаются вовсе.</p><p>ФЦ&nbsp; &nbsp; &nbsp;?? + 96 + тест - Такое будет если на главной странице phpMyAdmin выбрать сравнение utf8_general_ci, а вы попробуйте там выбрать cp1251_general_ci, и увидите вместо &quot;тест&quot; вопросики. Тонкостей в работе кодировок достаточно много, но исходить надо из правил написания запроса - стандарта - который говорит: что при конкатенации, для возвращения данных в виде строки, бинарные данные и числа должны быть конвертированы в строку функцией CAST().</p>]]></content>
			<author>
				<name><![CDATA[Hanut]]></name>
				<uri>https://forum.php-myadmin.ru/profile.php?id=181</uri>
			</author>
			<updated>2009-06-09T11:40:17Z</updated>
			<id>https://forum.php-myadmin.ru/viewtopic.php?pid=8382#p8382</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Что-то непонятное с кодировками]]></title>
			<link rel="alternate" href="https://forum.php-myadmin.ru/viewtopic.php?pid=8380#p8380" />
			<content type="html"><![CDATA[<p>Да, типы полей вы правильно угадали.</p><p>Всё равно не понятно. Разве в binary может быть часть данных в пределах поля, а не все оно целиком? Да, pma показывает, что результат binary, но при этом часть данных показывает корректно, а часть нет. Ведь если дело только в mysql, то запрос должен был бы вернуть только ????????, а не &#039;?? + 96&#039;. Т.е. часть этих самых binary-данных он показывает, а часть почему то нет. Даже если написать так - </p><div class="codebox"><pre><code>SELECT
        codeorgch,
        CONCAT(codeorgch,&#039; + &#039;,n_org,&#039; + &#039;, &#039;тест&#039;)
FROM tbl
LIMIT 5</code></pre></div><p>то в результате:<br /></p><div class="codebox"><pre><code>ФЦ     ?? + 96 + тест
ФЦ     ?? + 96 + тест</code></pre></div><p>Разве это не похоже на то, что первые два символа попросту пришли в другой кодировке?</p><p>Кстати, вот такой запрос опять же возвращает нормальный результат и без указания CAST:</p><div class="codebox"><pre><code>SELECT
        codeorgch,
        CONVERT(CONCAT(codeorgch,&#039; + &#039;,n_org) USING cp1251)
FROM tbl
LIMIT 5</code></pre></div>]]></content>
			<author>
				<name><![CDATA[Shopen]]></name>
				<uri>https://forum.php-myadmin.ru/profile.php?id=2054</uri>
			</author>
			<updated>2009-06-08T23:06:23Z</updated>
			<id>https://forum.php-myadmin.ru/viewtopic.php?pid=8380#p8380</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Что-то непонятное с кодировками]]></title>
			<link rel="alternate" href="https://forum.php-myadmin.ru/viewtopic.php?pid=8378#p8378" />
			<content type="html"><![CDATA[<p>Бинарный вывод - это вывод в виде BLOB/BINARY данных.</p><p>Если хотите конкретики, то следует указать тип данных полей, которые вы объединяете. Как я понял поле codeorgch имеет тип VARCHAR, поле n_org - INT. Если в phpMyAdmin, в блоке параметров убрать галочку &quot;Покзаать BINARY&quot;, то увидите не вопросики, а данные в виде BINARY. Если поле codeorgch имело бы тип TEXT, то вы бы увидели вывод данных в виде BLOB.</p><p>Но это не проблема phpMyAdmin, а особенность работы с типами данных MySQL.</p><p>В Денвере старая версия phpMyAdmin и там вроде нет галочки &quot;Показать BINARY&quot; вовсе.</p><p>Новые версии phpMyAdmin работают с MySQL только в utf8 в независимости от кодировок таблиц и БД. То, что на Денвере показывает - значения не имеет, так как очень старое, желательно его обновить.</p>]]></content>
			<author>
				<name><![CDATA[Hanut]]></name>
				<uri>https://forum.php-myadmin.ru/profile.php?id=181</uri>
			</author>
			<updated>2009-06-08T21:29:53Z</updated>
			<id>https://forum.php-myadmin.ru/viewtopic.php?pid=8378#p8378</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Что-то непонятное с кодировками]]></title>
			<link rel="alternate" href="https://forum.php-myadmin.ru/viewtopic.php?pid=8376#p8376" />
			<content type="html"><![CDATA[<p>Я не очень понимаю, что такое бинарный вывод, но MySQL Query Browser показывает как положено &quot;ФЦ + 96&quot;, правда обрезает в таблице результатов цифры, но если открыть поле в доп. окошке - то там всё в порядке.</p><p>Более того, сейчас скопировал проблемную базу себе на localhost, и выполнил запрос денверовским PMA - результат нормальный. Из чего делаю вывод, что проблема все таки в настройках PMA. Из того, что очевидно различается - на сервере pma почему то уверенно пишет, что у mysql кодировка utf-8, а на локалхосте, что cp1251. Все таблицы у меня в 1251.</p>]]></content>
			<author>
				<name><![CDATA[Shopen]]></name>
				<uri>https://forum.php-myadmin.ru/profile.php?id=2054</uri>
			</author>
			<updated>2009-06-08T12:47:09Z</updated>
			<id>https://forum.php-myadmin.ru/viewtopic.php?pid=8376#p8376</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Что-то непонятное с кодировками]]></title>
			<link rel="alternate" href="https://forum.php-myadmin.ru/viewtopic.php?pid=8375#p8375" />
			<content type="html"><![CDATA[<p><strong>Shopen</strong><br />phpMyAdmin всегда возвращает значения в том виде, как они приходят от MySQL, и в данном случае строка будет бинарной. Другие клиенты могут производить предварительную конвертацию своим парсером запроса, либо возвращать данные, как есть, а там уже браузер пусть думает.</p><p>Если посмотреть клиент MySQL Query Browser, то там вывод будет бинарный, как и должно быть.</p>]]></content>
			<author>
				<name><![CDATA[Hanut]]></name>
				<uri>https://forum.php-myadmin.ru/profile.php?id=181</uri>
			</author>
			<updated>2009-06-08T12:08:28Z</updated>
			<id>https://forum.php-myadmin.ru/viewtopic.php?pid=8375#p8375</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Что-то непонятное с кодировками]]></title>
			<link rel="alternate" href="https://forum.php-myadmin.ru/viewtopic.php?pid=8374#p8374" />
			<content type="html"><![CDATA[<p>Hanut, спасибо, ваш совет помог. Ни за что бы сам не догадался до этого <img src="https://forum.php-myadmin.ru/img/smilies/smile.png" width="15" height="15" alt="smile" /></p><p>Остался открытым только один вопрос - почему кодировки бьются только если я использую pma - а в других клиентах все работает и без CAST?</p>]]></content>
			<author>
				<name><![CDATA[Shopen]]></name>
				<uri>https://forum.php-myadmin.ru/profile.php?id=2054</uri>
			</author>
			<updated>2009-06-08T10:42:21Z</updated>
			<id>https://forum.php-myadmin.ru/viewtopic.php?pid=8374#p8374</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Что-то непонятное с кодировками]]></title>
			<link rel="alternate" href="https://forum.php-myadmin.ru/viewtopic.php?pid=8373#p8373" />
			<content type="html"><![CDATA[<p><strong>Shopen</strong><br />Конкатенация зависит от типа объединяемых значений: если все аргументы функции являются не бинарными строками, то результат будет возвращен в виде не бинарной строки; если один, или более, аргумент является бинарной строкой, то результат будет возвращен в виде бинарной строки. Важным моментом является поведение числовых значений - они переводятся в бинарный вид. То есть конкатенация строки и целого числа вернет строку в бинарном виде. Чтобы получить результат в виде не бинарной строки, следует принудительно преобразовать число в строку с помощью функции CAST().</p><div class="codebox"><pre><code>SELECT
        codeorgch,
        CONCAT(codeorgch,&#039; + &#039;, CAST(n_org AS CHAR))
FROM tbl
LIMIT 5</code></pre></div>]]></content>
			<author>
				<name><![CDATA[Hanut]]></name>
				<uri>https://forum.php-myadmin.ru/profile.php?id=181</uri>
			</author>
			<updated>2009-06-08T10:33:45Z</updated>
			<id>https://forum.php-myadmin.ru/viewtopic.php?pid=8373#p8373</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Что-то непонятное с кодировками]]></title>
			<link rel="alternate" href="https://forum.php-myadmin.ru/viewtopic.php?pid=8372#p8372" />
			<content type="html"><![CDATA[<p>Здравствуйте.<br />Имеем вот такой запрос, выполненный через phpmyadmin:</p><div class="codebox"><pre><code>SELECT
        codeorgch,
        CONCAT(codeorgch,&#039; + &#039;,n_org)
FROM tbl
LIMIT 5</code></pre></div><p>Результат будет примерно такой:<br /></p><div class="codebox"><pre><code>codeorgch     CONCAT(codeorgch,&#039; + &#039;,n_org)
ФЦ     ?? + 96
ФЦ     ?? + 96
ФЦ     ?? + 96
ФЦ     ?? + 96</code></pre></div><p>Видно, что во втором столбце полетела кодировка, вот только непонятно почему. Если в функцию concat третьим аргументом поставить например число (или вовсе убрать его) - то все нормально:</p><div class="codebox"><pre><code>codeorgch     CONCAT(codeorgch,&#039; + &#039;,11)
ФЦ     ФЦ + 11
ФЦ     ФЦ + 11
ФЦ     ФЦ + 11
ФЦ     ФЦ + 11</code></pre></div><p>Также хорошо видно, что без CONCAT() значение этого же стобца (первый) показывается корректно, остальные столбцы тоже. <br />В других клиентах проблем нет, например когда я такой же скрипт выполняю в своём скрипте - то результат нормальный всегда. Также он нормальный из других клиентов (типа ems sql manager). Как с эту проблему побороть?</p><br /><p>P.S. Да, от версии pma это не зависит, скачал поставил последний, 3.1.5 - там тоже самое. до этого стоял 2.11.4.<br />mysql - 5.0.45, windows server 2003</p>]]></content>
			<author>
				<name><![CDATA[Shopen]]></name>
				<uri>https://forum.php-myadmin.ru/profile.php?id=2054</uri>
			</author>
			<updated>2009-06-08T09:18:52Z</updated>
			<id>https://forum.php-myadmin.ru/viewtopic.php?pid=8372#p8372</id>
		</entry>
</feed>
