2012-07-13 95 views
6

我无法弄清楚我的生活。MySQL欧洲人物

我有一个查询,在页面上拉取元素的翻译。因此,该页面上可以显示任意数量的15种语言。当我开始添加像瑞典语这样的语言时,任何具有符号(如ö)的符号都会导致整个字段返回空字符串。

我已经验证了表格上的编码,它声称它使用的是UTF-8,但看到这种方式无法工作,我很困惑。

这是我的工作查询:

SELECT 
    form.form_id, 
    elem.elem_type, 
    elem.elem_name, 
    elem.elem_format, 
    elem.elem_required, 
    trans.trans_label,` 
    trans.trans_description, 
    trans.trans_defaultValue, 
    trans.trans_other, 
    elem.elem_advancedcommand 
FROM 
    events_form form 
LEFT JOIN 
    events_form_elements elem 
ON 
    form.event_id = elem.event_id 
INNER JOIN 
    events_form_translations trans 
ON 
    elem.elem_id = trans.elem_id 
INNER JOIN 
    events_form_languages lang 
ON 
    trans.lang_id = lang.lang_id 
WHERE 
    form.form_id = '{$formid}' AND lang.language = '{$language}' 
ORDER BY 
    elem.elem_sortorder 

现在我试着这样做:

CONVERT(CAST(trans.trans_description as BINARY) USING latin1) as trans_description,

,迫使它隐蔽编码但这并不完全可以产生结果。

当我得到结果后,它立即被json_encoded并返回给用户(Ajax请求)。我不认为这是json_encode,因为输出数组的print_r会产生相同的问题。

另外..最后,我建立的系统是使用xPDO,所以我不太确定这是否是问题。

编辑: 看来,PHP函数返回一个正确的值或者至少例如这里的值是一个print_r转储:

[trans_label] => Ditt f�rnamn? 
[trans_description] => 
[trans_defaultValue] => First Name 

如此看来,当我json_encode触及该字符串是转弯时该字符串为null。

+3

你有没有在页面上设置正确的字符集(以标记和php标题)并查询“SET NA” MES UTF8“在选择数据之前? – 32bitfloat 2012-07-13 22:26:01

+0

你有一个非常复杂的查询。原谅我问明显:数据是否正确?获取NULL值不是一种典型的字符编码问题。 – Joni 2012-07-14 19:01:54

+0

@JoniSalonen是的,我的SQL客户端会提取正确的信息,但通过代码发送时,它会返回空字符串。 – Peter 2012-07-16 04:27:28

回答

10

您的PDO连接字符串应指定编码。例如:

mysql:host=localhost;port=3306;dbname=test;charset=utf8 

这种控制,当它返回一个结果,编码司机假设你的查询都是在数据库驱动程序将使用的编码如果不指定,默认编码。将会被使用。通常默认为latin1

您可以通过在PHP中使用bin2hex打印数据的十六进制表示来进行确认:在förnamn中的ö返回为f6。如果文本以UTF-8编码,您将获得c3b6

+0

我按照你的建议破解了我用来强制使用UTF8的CMS,但我仍然得到如下输出结果:'Deth rf ltetkan intel mnasblankt。 ' – Peter 2012-07-16 16:31:28

+0

忽略上面:编辑:这工作。我所做的改变扔了一台服务器500,但稍微调整了一下它的效果很好。谢谢!你刚结束了三天的搜索。 – Peter 2012-07-16 16:40:03

3

你没有提到你的网页编码。
您是否在页面的<head>部分有该行来强制编码为UTF-8?

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
0

你的答案是转换后空由于数据不兼容types.But在网页上展示欧洲或阿拉伯字符是相当simple.I曾与阿拉伯语言同样的问题,但现在很少实验后其工作正常。

如果你想显示在页面上那些欧洲字符(JSP,PHP,HTML)先设置页面编码为UTF-8,如: -

的pageEncoding = “UTF-8”

,你也需要为UTF-8字符

使用下面的代码在你的数据库连接类的一些变化: -

的jdbc:mysql的:your_ipaddress “:3306 /”?+ DB +“requireSSL =假&了useUnicode =真&的characterEncoding = UTF-8

希望它会帮助你。

1

我已经endcoding信给我的母语冰岛问题,但香港专业教育学院发现所有UTF8字母互溶。

之后mysql_select_db之前的mysql_query插入如下:

mysql_query("SET character_set_connection=utf8, 
character_set_results=utf8, 
character_set_client=utf8", $con); 

其中$ con是连接到mysql

编码愉快..