视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
MySQL中文乱码的产生与解决
2020-11-09 14:05:26 责编:小采
文档

以下的文章主要介绍的是对MySQL 中文乱码的解的实际操作方案,以及对MySQL数据库中文乱码的产生原因的描述与在对MySQL 中文乱码进行解决过程中值得我们大家注意的事项的说明,下面就是文章的具体内容。 MySQL中文乱码的原因 MySQL(和PHP搭配之最佳组合)会出

以下的文章主要介绍的是对MySQL 中文乱码的解的实际操作方案,以及对MySQL数据库中文乱码的产生原因的描述与在对MySQL 中文乱码进行解决过程中值得我们大家注意的事项的说明,下面就是文章的具体内容。

MySQL中文乱码的原因

MySQL(和PHP搭配之最佳组合)会出现中文乱码的原因不外乎下列几点:

MySQL(和PHP搭配之最佳组合) server本身设定问题,例如还停留在latin1

MySQL(和PHP搭配之最佳组合) table的语系设定问题(包含character与collation)

客户端程式(例如php)的连线语系设定问题

在之前的两篇文章中已介绍过如何设定MySQL(和PHP搭配之最佳组合) server/table的character/collation。

接下来只需要补充几点注意事:

MySQL中文乱码必胜解决法

1、MySQL(和PHP搭配之最佳组合)启动时会读取一个预设的config档,一般名称为my.ini,而它会到下列两位置去寻找这个档案:

C:\windows\my.ini也就是作业系统的安装目录,也有可能是C:\winnt\my.ini

C:\:my.cnf也就是C disk的根目录

注意不同位置里的档案suffix不一样,这点在之前的文章中没有特别强调,因此那时我是用更复杂的方法直接重新将MySQL(和PHP搭配之最佳组合)注册到service里面,并在那里指定my.ini的位置。

2、my.ini里的内容为:

  1. [MySQL(和PHP搭配之最佳组合)d]
  2. defaultcharacterset=utf8
  3. [client]
  4. defaultcharacterset=utf8
  5. init_connect='SET NAMES utf8'

其中MySQL(和PHP搭配之最佳组合)d是指定server启动时要用的语系,但如果这里设定为utf8可能会让许多英文软体不开心,例如osCommerce/mediaWiki,所以这里建议设成latin1。

下面的client则是设定当client连线时要使用什么语系,但可惜的是这个设定不是每个client都会鸟它,基本上只有MySQL(和PHP搭配之最佳组合)自已家的程式,例如MySQL(和PHP搭配之最佳组合).exe, MySQL(和PHP搭配之最佳组合)d.exe, MySQL(和PHP搭配之最佳组合)admin.exe或是MySQL(和PHP搭配之最佳组合) Control Center这种程式会去读取这个设定档然后改用utf8连线。

note:感谢b6s桑热情相助提供第二行指令,据说比一支支php程式去设定connection setting更快,这样应该也可以顺便解决phpmyadmin无法正确显示unicode中文的问题(不过amfphp到是不吃这套,一定要乖乖的自已设定语系才行)

但大部份工程师应该都是自已写php/jsp(SUN企业级应用的首选)程式去连线,此时自然不会读取这个设定而继续使用预设的语系 latin1。

这也正是八成来信朋友阵亡的地方。

通常我会用一个的档案来处理MySQL(和PHP搭配之最佳组合) connection的设定,例如:

  1. PLAIN TEXT
  2. //database connection details.
  3. $host = "localhost";
  4. $link = MySQL(和PHP搭配之最佳组合)_connect($host, "xxx", "xxx");
  5. MySQL(和PHP搭配之最佳组合)_query("SET NAMES 'utf8'");
  6. MySQL(和PHP搭配之最佳组合)_select_db("your_table_name_here", $link);
  7. ?>

请注意在MySQL中文乱码(和PHP搭配之最佳组合)_connect后第五行的地方有加上一个"set names 'utf8' "的指令,告诉MySQL(和PHP搭配之最佳组合)这个connection之后的连线内容都要使用utf8,经过这样设定后,通常就可以解决大部份问题。

从这里也可以推想得知,如果你有用某种custom connection pooling机制,就要记得在每次建立新的connection后立即设定为utf8。

这组设定经过几天的反覆测试(使用中文繁、简、日文、韩文)后已经证实完全不会有乱码或是某些字变成"口"。

例子:试者输入这几个字「不道可否啰」如果它们能正确进入MySQL(和PHP搭配之最佳组合)再被读出来,那就是中文没问题了,如果读出来后变成『口』字那就是还未成功同志仍需努力...orz。

下载本文
显示全文
专题