我有一个包含多种语言的Mysql表,一种语言就是一个字段。
我的字符集是utf_general_ci
当我使用phpMyAdmin查看表格时,我有一个保加利亚页面,如下所示:
За наÑ
这是一个标题。这个标题在网站上显示如下:
За нас (this is correct)
我做错了什么?
答案 0 :(得分:3)
好的,尝试在实际获取记录之前执行这些查询:
mysql_query("SET NAMES 'utf8'");
mysql_query("SET character_set_results = 'utf8', character_set_client = 'utf8', character_set_connection = 'utf8', character_set_database = 'utf8', character_set_server = 'utf8'");
然后继续执行您的查询。上述查询(如果是)必须位于当前数据库连接的上下文中。
答案 1 :(得分:1)
这看起来像数据是UTF-8编码的,因此在声明为UTF-8编码的网页上运行良好,但在程序无法处理或未设置为应用UTF-8时则无效。
例如,出现两次的字符°Ñ是U + 00B0 U + 00D1。字节0xB0和0xD1是西里尔文小写字母a,U + 0430的UTF-8形式,它出现在正确文本的相应位置。显然,根据ISO-8859-1,Windows-1252或类似的8位编码,UTF-8数据被误解。
答案 2 :(得分:1)
表格中的字段使用什么字符集? 您能否分享一下这些字段的SHOW CREATE TABLE命令的相关部分?
由于ISO-8859-1是mysql的默认数据库字符集,并且它几乎不进行任何转换,因此人们将其用作BINARY并将UTF-8编码的Cyrillic存储到其中。这适用于Web开发工具,因为它们绑定到字段并以UTF-8编码的二进制字节接收数据,然后在没有转换的情况下将其放在一个网页中,表明它使用utf-8编码作为其输出。因此数据只是通过而没有正确编码以供数据库使用。当然,当您在数据库中执行操作时,这会导致各种问题(例如,获取字符与字节长度并尝试正确排序)。但对于基本的存储/检索操作,它看起来像是在工作。 对于非本地化的Web应用程序,这是一种非常典型的行为,假设它们最多使用ASCII或ISO-8859-1。 解决这个问题的方法是使用UTF-8编码创建新的表集,然后将错误编码的utf-8数据显式转码为宽字符,然后将它们放入utf-8表中,以便数据库知道正确的编码使用