0

我正在尝试制作从 MySQL 数据库读取的 ac# 项目。

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

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

获取数据时,它看起来像“ΛεπτομÎÏεια 3”。

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

当对 mysql (linux)、MySQL Workbench、用于 OpenOffice 的 MySQL 本机连接器和 OpenOffice Base 执行相同操作时,数据会正确显示。

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

运行查询'SELECT value, HEX(value), LENGTH(value), CHAR_LENGTH(value) FROM call_attribute;' 从我的程序内部。它返回:

值:ΛεπτομÎÏεια 3

十六进制(值):C38EE280BAC38EC2B5C38FE282ACC38FE2809EC38EC2BFC38EC2BCC38EC2ADC38FC281C38EC2B5C38EC2B9C38EC2B12033

长度(值):49

CHAR_LENGTH(值):24

有任何想法吗???

4

3 回答 3

1

您应该尝试SET NAMES 'utf8'查看此链接

于 2012-10-06T20:28:34.037 回答
1

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

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

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

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

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

于 2012-10-10T05:54:41.880 回答
0

我已经通过在 /etc/my.cnf 中设置“skip-character-set-client-handshake”来解决我的问题。之后一切正常,希腊词的编码正确,显示完美。

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

于 2012-10-10T05:13:32.227 回答