dongsuo0517 2013-04-22 07:37
浏览 118
已采纳

UTF-8给了我问号

I have this simple PHP-script, which searches a mySQL database and outputs the result to the user. I used to use ISO-8859-1 as my charset, but was advised to use UTF-8. But I have trouble going from my former charset to the new one.

To clarify some things, I have:

  • Created a database and table encoded in UTF-8 with collation utf8_unicode_ci.
  • Encoded my PHP-file in UTF-8.
  • Set meta charset to UTF-8.
  • Set all text mime-types to UTF-8 through create-mime.assign.pl in Lighty (Lighttpd).

Now, the problem arises when I retrieve data from the database with characters like ö, ü etc. If I just do echo "ö"; without retrieving it from the database, it works fine. I guess there must be something wrong with the database then?

I've tried the following, and they've solved my problem:

  • Set meta charset to ISO-8859-1 (which, for some strange reason works, but breaks the echo'd "ö").
  • Set a utf8_decode() function around the output.
  • After mysql_select_db() declared the following mysql_set_charset('utf8');.

I know that I've found multiple solutions, but I just don't know why it wont work without them? And is it bad practice to use utf8_decode() on output, or the mysql_set_charset() function?

  • 写回答

1条回答 默认 最新

  • dongwende1984 2013-04-22 07:43
    关注

    MySQL is funny with UTF8. You need to ensure the server is running in UTF and that the connection is as well

    If you can modify the my.cnf file on your server you can add these to the [mysqld] section and restart it

    character-set-server = utf8
    skip-character-set-client-handshake
    

    You could alternatively (or as well) use

    query("SET NAMES utf8");   
    

    before sending/retrieving data to ensure the database expects UTF8 data to be passed

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
编辑
预览

报告相同问题?

手机看
程序员都在用的中文IT技术交流社区

程序员都在用的中文IT技术交流社区

专业的中文 IT 技术社区,与千万技术人共成长

专业的中文 IT 技术社区,与千万技术人共成长

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

客服 返回
顶部