在mysql数据库中存储撇号,感叹号等

时间:2010-05-09 05:06:54

标签: mysql database apostrophe

我从latin1更改为utf8。虽然各种文本显示都很好,但我注意到非英文字符作为奇怪的符号存储在数据库中。我花了一天时间试图修复它,最后现在非英语字符显示为数据库中的非英语字符,并在浏览器上显示相同的字符。但是我注意到我看到撇号存储为',感叹号存储为!。这是正常的,还是应该像'和'一样出现?而在数据库中呢?如果是这样,我需要做些什么才能解决这个问题?

2 个答案:

答案 0 :(得分:0)

这实际上取决于您打算如何处理数据库的内容。如果您的不变量是“数据库的内容已经过消毒并且可以直接放在网页中而无需进一步验证/消毒”,则可以使用& amp; amp;和您的数据库中的其他html实体非常有意义。另一方面,如果您的数据库只存储原始原始数据,并且您打算处理它/清理它,然后在HTML代码中显示它,那么您应该用原始字符替换这些实体,使用UTF编码-8。因此,它实际上取决于您如何解释数据库内容。

答案 1 :(得分:0)

&#XX;表单为HTML character entities,暗示您通过PHP的htmlspecialcharshtmlentities等函数传递了存储在数据库中的值。如果值在HTML文档中处理(或者可能由任何HTML处理器处理,无论它们属于哪个),它们应该显示正常。除此之外,他们不会。

这意味着您可能不希望将它们编码为HTML实体。您可以使用您对其进行编码的函数(例如html_entity_decode)的对应值将值转换回来,该函数应该考虑要转换为哪种编码。完成后,检查一些以前有问题的条目,确保使用正确的编码来查看它们。

如果您仍然遇到问题,那么应该使用的存储值的编码与它们实际使用的内容之间存在不匹配。您必须弄清楚它们实际使用的是什么,然后通过从数据库中提取它们并在重新插入它们之前将它们转换为目标编码,或者使用它们实际使用的编码重新插入它们来转换它们。与后一个选项类似,将列转换为BLOB,然后更改列字符集,然后将列类型更改回文本类型,然后直接将列转换为所需的字符编码。这个难以处理的序列的原因是在更改字符编码时会转换文本类型,但不会转换二进制类型。

阅读“The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!)”以获取有关字符编码的更多信息,以及§ 9.1.4. of the MySQL manual, "Connection Character Sets and Collations",了解如何在MySQL中使用编码。