MySQL欧洲人物

时间:2012-07-13 22:00:59

标签: mysql utf-8 character-encoding

我无法想象我的生活。

我有一个查询可以提取页面上元素的翻译。因此,该页面上可以显示任意数量的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 Request)。我不认为这是json_encode,因为输出数组print_r会产生同样的问题。

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

编辑: 似乎PHP正在返回一个正确的值,或者至少是一个值,例如这里是一个print_r转储:

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

所以看来当我的json_encode触及该字符串时,它将字符串变为null。

4 个答案:

答案 0 :(得分:10)

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

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

它控制数据库驱动程序在返回结果时将使用的编码,以及驱动程序假定您的查询所在的编码。如果未指定,则默认编码为用过的。通常默认值为latin1

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

答案 1 :(得分:3)

您对网页的编码一无所知 您是否在页面的<head>部分中有该行以强制编码为UTF-8?

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

答案 2 :(得分:1)

我遇到了将字母转换为我的母语 Icelandic 的问题,但我找到了所有 utf8 字母的相互解决方案。

  

mysql_select_db 之后,在 mysql_query 之前插入以下内容:

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

其中$ con是与mysql的连接

快乐编码..

答案 3 :(得分:0)

由于数据类型不兼容,转换后您的答案为空。但在页面上显示欧洲或阿拉伯字符非常简单。我遇到了与阿拉伯语相同的问题,但经过一些实验后,它的工作正常。

如果你想在页面上显示那些欧洲字符(jsp,php,html),首先将页面编码设置为UTF-8,如: -

  

的pageEncoding = “UTF-8”

您还需要对utf-8字符的数据库连接类进行一些更改

使用以下代码: -

  

JDBC:MySQL的:your_ipaddress “:3306 /”?+分贝+“requireSSL =假安培;了useUnicode =真安培;的characterEncoding = UTF-8

希望它会对你有所帮助。