【问题标题】:Incorrect Greek characters with MySQL connector/net and C#MySQL 连接器/网络和 C# 的希腊字符不正确
【发布时间】:2012-10-06 20:15:08
【问题描述】:

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

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

数据是 self 是希腊词,例如“Λεπτομέρεια 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

有什么想法吗???

【问题讨论】:

    标签: c# mysql character-encoding


    【解决方案1】:

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

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

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

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

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

    【讨论】:

    • 这是正确的,但是数据库中输入数据的方式描述了utf8的使用。我也是这个领域的新手,所以我遵循一切都应该在 utf8 中的路径。
    【解决方案2】:

    你应该试试SET NAMES 'utf8' 看看this link

    【讨论】:

    • 我已经这样做了,但没有成功,我已经多次阅读此链接。对我有用的唯一解决方案是修改 /etc/my.cnf 并添加“skip-character-set-client-handshake”。
    【解决方案3】:

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

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

    【讨论】:

      猜你喜欢
      • 2011-01-30
      • 2015-07-25
      • 2011-12-30
      • 1970-01-01
      • 2018-02-12
      • 1970-01-01
      • 2011-12-04
      • 2016-10-05
      • 2018-03-12
      相关资源
      最近更新 更多