我正在开发一个本地网站,提供本地语言的信息。在mysql数据库中,有一个名为pagecontent的表,它有一个名为“text”的列。“文本”列类型是文本,排序规则是utf8_sinhala_ci
在mysql中,它通常显示字体:
但是当我把它放到php页面并回显该值时,它会显示诸如??????????之类的问号。
但是如果我硬编码并回送,那么它也会在php页面中正常显示。
当我从数据库中获取值时,我觉得有些问题。但我找不到错误。
我也试过遵循密码。

mysql_query ("set collation_connection='utf8_sinhala_ci'");
  $result =  mysqli_query($this->connecDB,"SELECT * FROM pageContent");

但那不管用。

最佳答案

当我从数据库中获取值时,我觉得有些问题。但是
我找不到错误。我也试过遵循密码。
您需要确保从连接到数据库,到表的整个链都是utf8干净的。我对a similar question here有一个详细的答案。
但在您的例子中,请检查实际的mysql服务器my.cnf文件。下面将整条链设置为UTF-8:

[client]
default-character-set=utf8

[mysql]
default-character-set=utf8

[mysqld]
collation-server = utf8_unicode_ci
init-connect='SET NAMES utf8'
character-set-server = utf8

更直接地,看看你的代码:
mysql_query("set collation_connection='utf8_sinhala_ci'");
$result = mysqli_query($this->connecDB,"SELECT * FROM pageContent");

在一行中,您正在调用mysql_query,在下一行中,您正在调用mysqli_query。但这些方法相互冲突,不应一起使用。它应该是这样的:
mysqli_query($this->connecDB, "SET collation_connection='utf8_sinhala_ci'");
$result = mysqli_query($this->connecDB,"SELECT * FROM pageContent");

请注意我是如何在您的mysqli_query之前设置mysqli_query($this->connecDB,…。它将在您用于SET collation_connection='utf8_sinhala_ci'的同一连接上发送查询。或者你可以试试这个:
mysqli_query($this->connecDB, "SET NAMES 'utf8'");
$result =  mysqli_query($this->connecDB, "SELECT * FROM pageContent");

09-30 15:48
查看更多