将unicode字符插入mysql数据库显示???????在现场

时间:2010-07-14 17:38:43

标签: php mysql

嘿伙计们我在尝试转换我的网络应用程序以支持unicode字符时遇到了麻烦。我有以下脚本试图将俄罗斯字符插入我的mysql数据库,但只是输出??????在我的mysql数据库字段中。我在php.ini中将默认字符集更改为UTF-8,并将我的表字段修改为collat​​ion:utf8_unicode_ci。有人有什么想法吗?

mb_language('uni'); mb_internal_encoding('UTF-8');

                $sql = 'SET NAMES utf8';
$stmt = $conn->prepare($sql);
$result=$stmt->execute();

$sql = 'SET CHARACTER SET utf8';
$stmt = $conn->prepare($sql);
$result=$stmt->execute();

$sql = 'INSERT INTO topic (topic_id,topic_title) VALUES (?,?)';
$stmt6 = $conn->prepare($sql);
$result=$stmt6->execute(array(0,"дравствуйте"));
?>

显示创建表格编辑

CREATE TABLE `topic` (
 `id` mediumint(8) NOT NULL AUTO_INCREMENT,
  `topic_title` varchar(255) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,

 `description` mediumtext CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,

 PRIMARY KEY (`id`),
 FULLTEXT KEY `description` (`description`),
 FULLTEXT KEY `topic_title` (`topic_title`),
 FULLTEXT KEY `topic_title_2` (`topic_title`,`description`),
 FULLTEXT KEY `description_2` (`description`)
) ENGINE=MyISAM AUTO_INCREMENT=39 DEFAULT CHARSET=latin1

6 个答案:

答案 0 :(得分:1)

我使用以下sql alter database mydatabase charset = utf8;

让它工作

答案 1 :(得分:0)

通常情况下,(如果你引用的文件也是utf-8),PHP& MySQL方面没问题,但事情的HTTP / HTML方面却没有。

  • 您是否发送了Content-Type: text/html;charset=utf-8标题?
  • HTML页面上是否有<meta>元素声明了另一个字符集,然后是utf-8?

所以,在更多信息之后:在'普通'PHP脚本中,我收集(?),在PHPMyAdmin中它没有(这应该使它更像是superuser.com b.t.w的候选者)。使用的PHPMyAdmin版本会很好,但通常情况下,如果非PHPMyAdmin脚本的其余部分工作,PHPMyAdmin配置中的$cfg['DefaultCharset'] = 'utf-8';应该可以正常工作。如果不是:更新到最新的PHPMyAdmin版本,如果它仍然无效,则提交错误报告。

答案 2 :(得分:0)

如果您在mysql浏览器或mysql cli上看到??????,请确保调整程序上的字符集设置,即使条目已正确添加到数据库中,正确显示它们也取决于客户端字符集设置。

答案 3 :(得分:0)

我倾向于认为问题不在于MySQL。

您正在将非ASCII字符串作为文字输入到PHP脚本中。你确定“дравствуйте”字符串将以UTF-8编码的形式发送到MySQL服务器吗?

我已经看到使用PHP和MySQL的nos ASCII字符存在一些问题,在操作系统,PHP解释器(它继承了操作系统的默认设置),数据库和开发工具(编码方式)之间存在不兼容的字符集配置。 .php文件)。如果所有四个都配置为相同的编码,它应该工作。

你说你的php.ini配置为UTF-8。如果您的源php文件不是UTF-8,它将无法正常工作!因此,检查您的php文件是否编码为UTF-8,以及mysql客户端是否也配置为UTF-8。

一个常见的错误是忘记将MySQL客户端配置为UTF-8,并且由于MySQL客户端应用程序的字符集问题而无法检查数据库上的数据。

家里有帮助!

答案 4 :(得分:0)

用于存储表情符号的数据库活动

1)[client]下的default-character-set = utf8mb4

2)[mysql]下的default-character-set = utf8mb4

3)在[mysqld]下 字符集客户端握手=否 字符集服务器=`utf8mb4` collat​​ion-server =`utf8mb4_unicode_ci`

4)使用以下命令重新启动Mysql服务器     

     `sudo service mysql stop`
     `sudo service mysql start`
    

5)ALTER DATABASE数据库名称字符集= utf8mb4 COLLATE = utf8mb4_unicode_ci;

6)ALTER TABLE table_name转换为字符集utf8mb4 COLLUT utf8mb4_unicode_ci;

7)设置名称utf8mb4;

答案 5 :(得分:0)

请从 PHPMYADMIN 中将排序规则更改为 utf32_general_ci,他们将支持并且某些情况下它将使现有的“????”也纠正一个。

PHP Myadmin illustration purpose