MySQL European Characters

Viewed 824

I can't figure this out for the life of me.

I have a query that pulls translations of elements on a page. So any number of 15 languages can appear on that page. When I start to add languages like Swedish anything that has a symbol such as ö results in the whole field returning a null string.

I've verified the encoding on the table and it claims it's using UTF-8 but seeing as how this doesn't work I'm confused.

Here is the query I'm working with:

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

Now I tried to do something like:

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

To force it to covert the encoding but that doesn't yield a result at all.

After I get the result it's immediately json_encoded and returned to the user (Ajax Request). I DON'T think it's the json_encode as doing a print_r of the output array yields the same issues.

Also.. lastly, the system I'm building on is using xPDO so I'm not too sure if that's the issue either.

EDIT: It seems that PHP IS returning a correct value or at least a value for example here is a print_r dump:

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

So it seems that when my json_encode touches that string is when it turns the string to null.

4 Answers
Related