使用MySQL连接器/ net和C#的希腊字符不正确

时间:2012-10-06 20:15:08

标签: c# mysql character-encoding

我正在尝试创建一个从MySQL数据库中读取的c#项目。

使用utf-8编码从php页面插入数据。页面和数据都是utf-8。

数据是自我是希腊语,如“Λεπτομέρεια3”。

当获取数据时,它看起来像“Î>ÎμÏ€”οÎÎÎÎÎÎÎÎÎÎÎÎÎÎα3“。

我在连接字符串中设置了'charset = utf8',并尝试使用'set session character_set_results = latin1;'查询。

当使用mysql(linux),MySQL Workbench,OpenOffice的MySQL本机连接器和OpenOffice Base时,数据显示正确。

我做错了什么或者我还能做些什么?

运行查询'SELECT值,HEX(值),LENGTH(值),CHAR_LENGTH(值)FROM call_attribute;'来自我的程序。 它返回:

值: Î>ÎμπϓομÎÏÎμια±3

HEX(值): C38EE280BAC38EC2B5C38FE282ACC38FE2809EC38EC2BFC38EC2BCC38EC2ADC38FC281C38EC2B5C38EC2B9C38EC2B12033

LENGTH(值): 49

CHAR_LENGTH(值): 24

任何想法???

3 个答案:

答案 0 :(得分:1)

您应该尝试SET NAMES 'utf8'并查看this link

答案 1 :(得分:1)

您声明数据的第一个字符是大写字母Λ

此字符的UTF-8表示为0xCE 0x9B,而HEX()值以C38E开头,如问题所示,这确实是具有抑扬符号的大写字母I.

所以我想原来的错误不在PHP配置中,并且您对“数据显示正确”的印象是错误的,并且由于编码问题。

另请注意,将希腊语数据存储为单字节字符而不是Unicode时,希腊字母只需要Latin-7而不是Latin-1。

最有可能的是,这里存在编码问题,这意味着不同的应用程序将二进制数据解释为不同的字符集或编码。 (但缺乏PHP和MySQL知识,我无法真正帮助您正确配置)。

答案 2 :(得分:0)

我设法通过在/etc/my.cnf'中设置'skip-character-set-client-handshake'来解决我的问题。之后一切都很好,希腊语的编码是正确的,显示是完美的。

一个缺点是我不得不再次将所有数据重新输入数据库。