MySQL的中文UTF8乱码问题

MySQL的中文UTF8乱码问题
MySQL支持Unicode编码后,为了跟上时代的步伐,我们的网站程序也开始考虑使用utf8的。事实上,utf8也已经使用了好几年,程序可以运行基本上没有大的问题,但数据改变时,总是会遇到不愉快的事情。

{问题现象}

xxx.php EditPlus保存为UTF8格式,MySQL设置默认字符集= utf8在my.ini,与创建的表` XXX(名字` varchar(255))= MyISAM引擎默认的字符集utf8,xxx.php执行插入/更新/选择似乎是没有问题的,但phpMyAdmin选择是乱码,与第三方工具软件(如SQLyog)在选择是乱码,mysqldump是乱码,很不舒服。当然,如果你选择二进制 / / varbinary BLOB类型当你建立的表,你不会找到乱码,因为指定的一个二进制保存,并没有编码的概念,当MySQL保存数据。

{查找问题}

虽然默认字符集= utf8设置my.ini,有新发现时,执行如下命令:
MySQL >显示变量like'character %;

+ ---------------------------------------- + -------------------------

| variable_name |价值

+ ---------------------------------------- + -------------------------

| character_set_client | latin1

| character_set_connection | latin1

| character_set_database | UTF8

| character_set_filesystem |二进制

| character_set_results | latin1

| character_set_server | UTF8

| character_set_system | UTF8

| character_sets_dir | D: 共享MySQL字符集

+ ---------------------------------------- + -------------------------

8行(0秒)
MySQL >显示变量like'collation_ %;

+ --------------------------------------- + ------------------

| variable_name |价值

+ --------------------------------------- + ------------------

| collation_connection | latin1_swedish_ci

| collation_database | utf8_general_ci

| collation_server | utf8_general_ci

+ -------------------------------------- + ------------------

3行(0秒)

发现价值列不都是UTF8,还有latin1的某些部分,如客户端连接。工作过程是这样的:xxx.php:从xxx.php页输入汉字,因为xxx.php是UTF8编码,所以,xxx.php UTF8格式转换为文本输入汉字,然后提交给MySQL,但MySQL客户端连接latin1,和桌子是UTF8,所以MySQL存储,xxx.php首次提出汉字转换成latin1格式,然后转成utf8字符格式的表。如果我们使用第三方软件或phpMyAdmin去选择看这表,在表中存储的数据是UTF8字符,通过latin1。出来的时候,它是采取UTF8格式。当然,它看起来是随机的。解决的办法是使所有进程UTF8。

{解决问题}

1。从my.ini
{客户}

默认字符集= utf8

{ MySQL }

默认字符集= utf8

{他}

默认字符集= utf8

以上3部分要添加默认字符集= UTF8,通常我们可以只添加一个mysqld。

然后重新启动MySQL,执行

MySQL >显示变量like'character %;

MySQL >显示变量like'collation_ %;

确保所有的物品价值是UTF8。

2、当建表是用UTF8,表的字段的排序规则不能增加,而默认是没有时间utf8_general_ci。
创建表(` tablename4 `

` ID ` int(11)不为空auto_increment,

` varchar1 ` varchar(255)默认为空,

` varbinary1 ` varbinary(255)默认为空,

主键(id)

)= MyISAM引擎默认的字符集utf8
3、xxx.php保存UTF8编码的标题,最好加

头('conten-type:文本/ HTML;字符集= UTF-8);

执行CRUD操作之前执行它

mysql_query(SET NAMES UTF8);

测试代码xxx.php如下:
< PHP

头('conten-type:文本/ HTML;字符集= UTF-8);

mysql_connect(localhost

mysql_select_db(测试);

mysql_query(SET NAMES UTF8);

$str =CHN软体开发资讯公司,JPN,评估人类发展公司,韩国,俄罗斯,还有一些来自T,M. M从C·节能E C E确定现场的第一部分(时间);

为SQL =插入tablename4(varchar1,varbinary1)值(,、结构元。和美元);

sql $。;

mysql_query($ SQL);
结果= mysql_query美元(选择ID,varchar1,varbinary1从tablename4 );

而($行= mysql_fetch_array(美元的结果,mysql_both)){

printf(ID:%s,varchar1:%s,varbinary1:%s

}
mysql_free_result($结果);

>

这样设置后,它被插入在PHP页面的任何字符UTF8,带它的PHP页面,在phpMyAdmin,取出MySQL第三方客户端软件,是相同的汉字,从来没有发现也是乱码,就中国characters.ok,问题就解决了。

{等}在中文Windows系统,在cmd.exe运行mysql.exe字符终端,不能使用上述规则,因为默认情况下,中文Windows系统cmd.exe代码页cp936或GBK,显示所有utf8的字符,所以垃圾是正常现象,在字符终端不奇怪,这个问题可以解决在shell终端在UNIX系统。

tag:乱码问题中文电脑软件mysql

相关内容