我正在尝试创建一个从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
任何想法???
答案 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'来解决我的问题。之后一切都很好,希腊语的编码是正确的,显示是完美的。
一个缺点是我不得不再次将所有数据重新输入数据库。