【发布时间】:2015-03-01 06:18:56
【问题描述】:
在处理不同的字符集时,这些类型的编码问题会变得复杂。在这些情况下,仅更改排序规则并不能解决问题,您需要更改 CHARSET。只有在更改 CHARSET 之后,您才应该担心排序规则(它们不是一回事)。
为了安全起见,请先导出您的数据库/表,然后再对其进行更改。
我将首先将表格转换为 utf8,因为它现在是标准。
ALTER TABLE tbl_name
CONVERT TO CHARACTER SET utf8
通过这样做,它还会将表和列的CHARSET 更改为utf8,但您可能仍需要手动将列的排序规则更改为utf8_general_ci(好像您已经这样做了)。
如果您想更改默认字符集(用于新列)...
ALTER TABLE tbl_name
DEFAULT CHARACTER SET utf8
编辑:
如果更改数据库中的CHARSET 不起作用,您可以尝试在 PHP 端进行设置。只需在连接后添加即可。
mysql
mysql_set_charset("utf8");
mysqli
$mysqli->set_charset("utf8");
PDO
PDO::MYSQL_ATTR_INIT_COMMAND => "SET CHARACTER SET 'utf8'"
这里有一些有用的文档:
10.1 Character Set Support
10.1.12 Column Character Set Conversion
10.1.13.1 Unicode Character Sets
【讨论】:
-
感谢 EternalHour,我已按照您的建议将 table 的字符转换为 utf8,仍然显示带有 ?里面
-
@HSL808 - 我已经添加了其他东西来尝试。
-
$mysqli->set_charset("utf8");是什么最终为我工作。我的表格也被转换了,字段的字符集以及我尝试了一切。
可以使用html字符实体代替直接符号
不要使用
®
试试看
®
【讨论】:
您可以通过 HTMLEntity 将商标、版权或其他符号转换为/输出数据库
htmlentities() 函数将字符转换为 HTML 实体。
参考:http://www.php.net/manual/en/function.htmlentities.php
参考:http://www.php.net/manual/en/function.htmlspecialchars.php
®注册商标®
™ 商标符号:™
其他有用的信息和符号可以在这里找到:http://www.w3schools.com/html/html_entities.asp
【讨论】:
-
这与为什么当符号在数据库中正常时检索 MySQL 查询时字符集无法输出符号无关。