首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法在mysql上插入utf8字符(使用utf8排序规则、字符集和名称集)

问无法在mysql上插入utf8字符(使用utf8排序规则、字符集和名称集)
EN

Stack Overflow用户
提问于 2010-11-30 10:59:30
回答 3查看 7.2K关注 0票数 4

我在这里面临着一个非常紧张的问题..我有UTF-8格式的所有东西,我所有的数据库和表都是utf8_general_ci格式的,但是当我试图从一个PHP脚本插入或更新时,我看到的都是符号。但是,如果我在phpmyadmin中进行编辑,这些单词将正确显示。我发现如果我在php中对我的字符串运行utf8_decode()函数,我可以让它工作,但我不打算这样做,因为这很混乱,而且它应该不这样做就能工作:

下面是我用来测试这一点的基本代码:

代码语言:javascript
复制
<?php
$conn=mysql_connect("localhost","root","root") 
  or die("Error");
mysql_select_db("mydb",$conn) or
  die("Error");
mysql_query("UPDATE `mydb`.`Clients` SET `name` = '".utf8_decode("Araña")."' WHERE `Clients`.`id` =25;", 
   $conn) or die(mysql_error());
mysql_close($conn);
echo "Success.";
?>

这是如果我不使用php utf8_decode函数解码utf8得到的结果:

我得到的不是阿拉,而是阿拉

EN

回答 3

Stack Overflow用户

发布于 2011-06-28 00:12:29

我已经遇到同样的问题很多次了。有时是因为我选择的数据库链接类型与我用于插入的类型不同,而在其他情况下,它是从文件数据到数据库的。

对于后一种情况,mysql_set_charset('utf8',$link);是神奇的答案。

在通过mysql_select_db选择数据库之后,立即调用mysql_set_charset。

@ref http://php.net/manual/en/function.mysql-set-charset.php

票数 4
EN

Stack Overflow用户

发布于 2010-11-30 11:09:32

“Ara?±a”是UTF-8。字符“?±”表示西班牙字母以UTF-8编码成的两个字节。无论您使用的是什么,都不能处理UTF-8,而是将其显示为(看起来) ISO-8859-1。

票数 1
EN

Stack Overflow用户

发布于 2011-06-28 09:09:02

您提到的DDL与排序规则有关,而与字符集无关。正确的说法应该是:

代码语言:javascript
复制
ALTER TABLE Clients CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;

您仍然需要确保客户端库(libmysql或PHP使用的任何驱动程序)没有将数据代码转换回ISO-8859。mysql_set_charset('utf8')将显式地将客户端编码设置为UTF-8。或者,也可以在连接到数据库后立即发送一组名称UTF8;。要隐式地实现这一点,可以将my.cnf客户端块更改为使用utf-8作为客户端字符编码(并应用/etc/init.d/mysql重新加载)。无论哪种方式,都要确保客户端不会破坏它所提取的结果。

客户端默认字符集=UTF8

如果您使用的是to字符串,则不需要使用utf8_decode。以下php.ini配置应确保PHP端支持UTF8:

代码语言:javascript
复制
mbstring.internal_encoding = utf-8
mbstring.http_output = utf-8
mbstring.func_overload = 6

最后,在HTML中显示结果时,请验证页面的编码是否显式为UTF-8。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4310148

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档