字符编码&数据库

时间:2014-11-18 09:57:17

标签: php mysql phpmyadmin

我的域名中的字符编码存在很大问题。对我来说最重要的是我不理解它。我使用元标记将所有网站设置为utf-8:

<meta charset="UTF-8">

这似乎已经解决了一些问题。现在我发现网站和数据库之间存在问题,当用户输入他们的名字或姓氏时,它有一个重音,它没有正确显示。但是我进行了以下测试。

我创建了一个名为&#39; test&#39;的测试表。 (富有想象力我知道)

我写了一个非常小的脚本来从文本框中取出值并将其放入此表中,然后在每次显示此页面时显示该表的内容,这样我就可以看到发生了什么。

以下是一些屏幕截图,首先是页面输出:

The <code>var_dump</code> of the database results I get from tabe 'test'

然后是数据库本身的屏幕截图: Quick view of phpMyAdmin table <code>test</code>

因此列first的类型为VARCHAR(50),我只是按照惯例保留设置,字符编码为latin_swedish1或其他内容。在id 4之后,我将其更改为utf8_bin,但这仍然没有什么区别。

问题是,数据在网站上仍然显示正常,但在数据库中看起来很糟糕。这是一个问题,这应该怎么做?我认为用户抱怨的问题是它被放入电子邮件和PDF等等,我不认为我设置了字符编码。

非常欢迎任何帮助和建议。

4 个答案:

答案 0 :(得分:1)

分配3列类型时,如何分配?我会确保它与VARCHAR(n) CHARSET utf8一致,因为这会使您的列类型更正为UTF8标准,更常见的是我看到UCS2(VARCHAR(n) CHARSET ucs2),这可能会导致后续问题

您可以使用NVARCHAR(请参阅http://dev.mysql.com/doc/refman/5.0/en/charset-national.html)自sql 5开始设置。

要自行更改列的类型,可以使用以下类型的命令:

Alter table tablenamehere MODIFY columnidhere newdatatypehere;

例如

Alter table mytabelforphp MODIFY oldvarcharcolumnId nvarchar(1024);

如果您需要更多信息,请告诉我们:)

答案 1 :(得分:1)

尝试使用utf8_general_ci。这将解决麻烦。

答案 2 :(得分:1)

创建表时,确保charset为utf8。 创建表my_table( id int主键, ..... )engine = innodb charset = utf8;

并确保您的连接正在为utf8设置charset。这取决于您使用的每个框架。

您可以将内部字符设置为utf-8 / *将内部字符编码设置为UTF-8 * / mb_internal_encoding(&#34; UTF-8&#34);检查http://php.net/manual/en/function.mb-internal-encoding.php

答案 3 :(得分:0)

还将您的字符编码添加到数据库连接 如果你有mysqli连接使用: mysqli::set_charset

如果您使用PDO,请按照以下步骤操作:

PDO_MYSQL DSN