我想使用PHP在我的数据库中以印地语Unicode格式保存数据。我在我的数据库连接页面添加了几行代码。
mysql_query('SET character_set_results=utf8');
mysql_query('SET names=utf8');
mysql_query('SET character_set_client=utf8');
mysql_query('SET character_set_connection=utf8');
mysql_query('SET character_set_results=utf8');
mysql_query('SET collation_connection=utf8_general_ci');
此外,我已将此行添加到我输入的页面,并将我的Unicode数据显示到其head
属性
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
但是我的数据在数据库中存储为'?????'并以相同的格式显示。甚至我的新行字符也被跳过,因为数据以单行显示。
答案 0 :(得分:4)
我怀疑您的数据库使用的是不同的字符集。确保使用以下命令创建数据库:
create database something -- or 'alter database something' in case it exists
default character set utf8
default collate utf8_general_ci
目前您只是告诉您的查询以UTF-8编码,但您的数据库可能仍在使用不同的字符集。
另外,请确保您实际正确输出这些数据,并以UTF-8编码。
答案 1 :(得分:1)
您可以使用mysql_client_encoding从该页面检查数据库的编码:
$link = mysql_connect('localhost', 'mysql_user', 'mysql_password');
$charset = mysql_client_encoding($link);
echo "The current character set is: $charset";
编码可能不是utf8,但您可以使用命令行中的mysql或像phpMyAdmin这样的工具来更改它。
另请注意,根据php手册,mysql_set_charset比使用查询设置字符集更受欢迎。
答案 2 :(得分:0)
AFAIK SET names=utf8
不正确,应为SET NAMES 'utf8'
答案 3 :(得分:0)
更常见的原因是Header内容类型。
如果apache发送标题内容类型,则其优先级高于元html。
header('Content-Type: text/html; charset=utf-8');