<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>花儿开了 &#187; mysql</title>
	<atom:link href="http://blog.istef.info/tag/mysql/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.istef.info</link>
	<description>Just another WordPress weblog</description>
	<lastBuildDate>Sun, 06 Jun 2010 05:52:19 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
	<atom:link rel='hub' href='http://blog.istef.info/?pushpress=hub'/>
		<item>
		<title>Movable Type 迁移乱码问题的解决</title>
		<link>http://blog.istef.info/2006/09/13/the-solution-of-mysql-character-problem-while-the-migration-of-movabletype/</link>
		<comments>http://blog.istef.info/2006/09/13/the-solution-of-mysql-character-problem-while-the-migration-of-movabletype/#comments</comments>
		<pubDate>Tue, 12 Sep 2006 16:12:28 +0000</pubDate>
		<dc:creator>iStef</dc:creator>
				<category><![CDATA[Experiences]]></category>
		<category><![CDATA[bluehost]]></category>
		<category><![CDATA[charset]]></category>
		<category><![CDATA[flypig]]></category>
		<category><![CDATA[mt]]></category>
		<category><![CDATA[mysql]]></category>

		<guid isPermaLink="false">http://blog.istef.info/2006/09/13/the-solution-of-mysql-character-problem-while-the-migration-of-movabletype/</guid>
		<description><![CDATA[飞猪这两天被博客搬家的事情搞得坐卧不安，他的博客平台为 Movable Type，新的虚拟主机选择的是 Bluehost 的虚拟主机，也因此碰到了一个很常见，很麻烦的问题——乱码。今天帮他解决了这个问题，丫很高兴，非让我写个“通俗易懂”的教程造福全人类，那我就写的尽量通俗一点好了。 适用条件：原来的数据库为 MySQL 3.X 或 4.0.X（比如飞猪原来用的玛雅网络），迁移到的数据库为 MySQL 4.1.X 及以上版本。 具体步骤： 在原来的主机（Mysql 3.x/4.0.x）上使用 phpMyAdmin 导出数据，导出时要注意先点击左侧被导出的数据库，然后点击右侧上方的 Export，选中所有的表，导出即可。 在新主机（MySQL 4.1.x or higher）上使用 phpMyAdmin 建立一个数据库（或者使用虚拟主机的面板建立也可以），然后在 phpMyAdmin 中打开这个数据库（左侧点击数据库名），点击右侧的 Operations，然后将下方的 Collection 更改为 utf8-general-ci。 点击 Import，将第一步导出的数据导入数据库。 找到 /lib/MT/ObjectDriver/DBI/mysql.pm，找到这样一段（修改位置在 99 行，MT 3.2），按照下面的提示修改： sub init { &#160;&#160; &#160;my $driver = shift; &#160;&#160; &#160;$driver-&#62;SUPER::init(@_); &#160;&#160; &#160;my $cfg = $driver-&#62;cfg; &#160;&#160; &#160;my [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.flypig.org">飞猪</a>这两天被博客搬家的事情搞得<a href="http://www.flypig.org/001942.html">坐卧不安</a>，他的博客平台为 Movable Type，新的虚拟主机选择的是 <a href="http://www.bluehost.com">Bluehost</a> 的虚拟主机，也因此碰到了一个很常见，很麻烦的问题——乱码。今天帮他解决了这个问题，丫很高兴，非让我写个“通俗易懂”的教程造福全人类，那我就写的尽量通俗一点好了。</p>
<p>适用条件：原来的数据库为 MySQL 3.X 或 4.0.X（比如飞猪原来用的玛雅网络），迁移到的数据库为 MySQL 4.1.X 及以上版本。</p>
<p>具体步骤：
<ol>
<li>在原来的主机（Mysql 3.x/4.0.x）上使用 phpMyAdmin 导出数据，导出时要注意先点击左侧被导出的数据库，然后点击右侧上方的 Export，选中所有的表，导出即可。</li>
<li>在新主机（MySQL 4.1.x or higher）上使用 phpMyAdmin 建立一个数据库（或者使用虚拟主机的面板建立也可以），然后在 phpMyAdmin 中打开这个数据库（左侧点击数据库名），点击右侧的 Operations，然后将下方的 Collection 更改为 utf8-general-ci。</li>
<li>点击 Import，将第一步导出的数据导入数据库。</li>
<li>找到 <mt-dir>/lib/MT/ObjectDriver/DBI/mysql.pm，找到这样一段（修改位置在 99 行，MT 3.2），按照下面的提示修改：
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline">sub init {</li>
<li>&nbsp;&nbsp; &nbsp;my $driver = shift;</li>
<li>&nbsp;&nbsp; &nbsp;$driver-&gt;SUPER::init(@_);</li>
<li>&nbsp;&nbsp; &nbsp;my $cfg = $driver-&gt;cfg;</li>
<li>&nbsp;&nbsp; &nbsp;my $dsn = 'dbi:mysql:database=' . $cfg-&gt;Database;</li>
<li>&nbsp;&nbsp; &nbsp;$dsn .= ';hostname=' . $cfg-&gt;DBHost if $cfg-&gt;DBHost;</li>
<li>&nbsp;&nbsp; &nbsp;$dsn .= ';mysql_socket=' . $cfg-&gt;DBSocket if $cfg-&gt;DBSocket;</li>
<li>&nbsp;&nbsp; &nbsp;$dsn .= ';port=' . $cfg-&gt;DBPort if $cfg-&gt;DBPort;</li>
<li>&nbsp;&nbsp; &nbsp;$driver-&gt;{dbh} = DBI-&gt;connect($dsn, $cfg-&gt;DBUser, $cfg-&gt;DBPassword,</li>
<li>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;{ RaiseError =&gt; 0, PrintError =&gt; 0 })</li>
<li>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;or return $driver-&gt;error(MT-&gt;translate(&quot;Connection error: [_1]&quot;,</li>
<li>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $DBI::errstr));</li>
<li>&nbsp;&nbsp; &nbsp;$driver-&gt;{dbh}-&gt;do(&quot;SET NAMES 'utf8'&quot;); // 添加这一行</li>
<li>&nbsp;&nbsp; &nbsp;$driver;</li>
<li>}</li></ol></div>
</li>
</ol>
<p>好了，乱码问题应该没有了。Enjoy!</p>
<p>下面简单讲讲原理，不想看的略过就好了，呵呵<span id="more-520"></span></p>
<p>其实问题主要出在 MySQL 上。MySQL 自从 4.1 版开始，添加了字符集支持。MySQL 在存取数据的时候，会对字符集进行转换。而 MySQL 之前的版本没有这个特性，升级的时候，MySQL 4.1 会将他们统统认为 latin1-swedish-ci。而像 MT, WordPress 那样使用 UTF-8 编码存储的程序在这里就会出问题了。</p>
<p>解决这个问题，有个取巧的办法。因为 MySQL 3.X 因为没有这个特性，当我们导出 MySQL 数据表时并不包含字符集设置的信息。在导入 MySQL 4.1.x 之前，我们首先将数据库默认的字符集设定为 UTF-8，再导入，字符集就正确了。</p>
<p>修改 MT 那个文件，就是为了让 MT 能够按照正确的字符集来读写 MySQL。SET NAMES &#8216;UTF8&#8242; 这条命令就是将输入输出字符均设置为 UTF-8，由此便解决了乱码问题。</p>
<p>本文参考了<a href="http://www.kingda.org/archives/kingda/2006/04/mt32_1.html">这篇文章</a>，这篇文章的方法在两个 MySQL 4.1.x 数据库之间迁移时，并且可以使用 Shell 的情况下会非常好用。如果您属于这种情况，可以参考一下。</p>
<p>本文所讲述的方法在 <a href="http://www.flypig.org">Flypig 的博客</a>上验证通过。
<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fblog.istef.info%2F2006%2F09%2F13%2Fthe-solution-of-mysql-character-problem-while-the-migration-of-movabletype%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fblog.istef.info%2F2006%2F09%2F13%2Fthe-solution-of-mysql-character-problem-while-the-migration-of-movabletype%2F&amp;style=compact&amp;service=bit.ly&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
]]></content:encoded>
			<wfw:commentRss>http://blog.istef.info/2006/09/13/the-solution-of-mysql-character-problem-while-the-migration-of-movabletype/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>注意：MySQL 全文检索不支持多字节</title>
		<link>http://blog.istef.info/2006/09/06/the-fulltext-match-of-mysql-does-not-support-multibyte-character/</link>
		<comments>http://blog.istef.info/2006/09/06/the-fulltext-match-of-mysql-does-not-support-multibyte-character/#comments</comments>
		<pubDate>Wed, 06 Sep 2006 10:20:26 +0000</pubDate>
		<dc:creator>iStef</dc:creator>
				<category><![CDATA[Experiences]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[multibyte]]></category>
		<category><![CDATA[mysql]]></category>

		<guid isPermaLink="false">http://blog.istef.info/2006/09/06/the-fulltext-match-of-mysql-does-not-support-multibyte-character/</guid>
		<description><![CDATA[WordPress 的搜索用的是简单的匹配，不支持分词之类的特性。MySQL 4 之后增加了全文检索功能，通过使用全文检索，可以是搜索结果更加精确，而且结果也可以按照相关度排序，速度也快，非常方便。 基于上面的想法，今天花了一天的时间开发了一个 WordPress 全文搜索的插件，准备先用在这里和 Moneybeta 上，完善后再发布出来。基本上完成 80% 后测试，奇怪，就是搜索不到结果。我下意识的随便敲了几个英文单词，竟然有结果了，难道是 MySQL 不支持多字节字符的全文搜索？ Google，最终肯定了我的判断。没想到强大的 MySQL 竟然又把我们这些古老文明给遗忘了。最郁闷的是，我今天这一天算是白忙活了。TNND。 得出两个结论，也可以说是教训：第一，中文网站就不要用 MySQL 的全文搜索功能了，如果你也有打算这么做的话，赶快将你的想法消灭在萌芽里；第二，以后想做什么东西之前先 Google，免得做无用功。]]></description>
			<content:encoded><![CDATA[<p>WordPress 的搜索用的是简单的匹配，不支持分词之类的特性。MySQL 4 之后增加了全文检索功能，通过使用全文检索，可以是搜索结果更加精确，而且结果也可以按照相关度排序，速度也快，非常方便。</p>
<p>基于上面的想法，今天花了一天的时间开发了一个 WordPress 全文搜索的插件，准备先用在这里和 Moneybeta 上，完善后再发布出来。基本上完成 80% 后测试，奇怪，就是搜索不到结果。我下意识的随便敲了几个英文单词，竟然有结果了，难道是 MySQL 不支持多字节字符的全文搜索？</p>
<p>Google，最终肯定了我的判断。没想到强大的 MySQL 竟然又把我们这些古老文明给遗忘了。最郁闷的是，我今天这一天算是白忙活了。TNND。</p>
<p>得出两个结论，也可以说是教训：第一，中文网站就不要用 MySQL 的全文搜索功能了，如果你也有打算这么做的话，赶快将你的想法消灭在萌芽里；第二，以后想做什么东西之前先 Google，免得做无用功。
<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fblog.istef.info%2F2006%2F09%2F06%2Fthe-fulltext-match-of-mysql-does-not-support-multibyte-character%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fblog.istef.info%2F2006%2F09%2F06%2Fthe-fulltext-match-of-mysql-does-not-support-multibyte-character%2F&amp;style=compact&amp;service=bit.ly&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
]]></content:encoded>
			<wfw:commentRss>http://blog.istef.info/2006/09/06/the-fulltext-match-of-mysql-does-not-support-multibyte-character/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
	</channel>
</rss>

<!-- Performance optimized by W3 Total Cache. Learn more: http://www.w3-edge.com/wordpress-plugins/

Minified using memcached
Page Caching using memcached
Database Caching 1/13 queries in 0.007 seconds using memcached
Object Caching 436/462 objects using memcached

Served from: blog.istef.info @ 2012-02-13 07:26:48 -->
