【问题标题】:MySql C# Insert Error. Incorrect string value: '\xE1ra'MySql C# 插入错误。不正确的字符串值:'\xE1ra'
【发布时间】:2012-09-05 04:07:55
【问题描述】:

我正在使用 C# .NET Mysql 连接器,并且在运行此查询时:

INSERT INTO convos (`userid`,`time`,`from`,`content`,`read`,`deleted`, `ip`, `source`, `charname`, `to`) VALUES ('3', '1347396787', 'Chára', '........', '0', '0', '0.0.0.0:0000', 'C', 'óóóíííí', 'óóóíííí');

我收到以下错误:

不正确的字符串值:第 1 行的列 'from' 的 '\xE1ra'

我了解我的编码,一切都配置为 utf8,utf8_general_ci。数据库、表和列配置为 utf8。数据以utf8格式从客户端发送。

如果我使用诸如 Workbench 之类的第 3 方工具来插入查询或使用 mysql 命令行,它工作正常。我不知道连接器是否存在错误,或者我需要在插入之前对这些值执行其他操作?

有什么想法吗?

谢谢

mysql中有没有可以转换成正确类型的?

【问题讨论】:

  • \xE1 表示您的数据没有以 UTF-8 格式发送。您如何创建/处理查询?
  • 最初我从客户端接收数据,但为了测试我手动输入查询。所以它像字符串 = "INSERT INTO convos (userid,time,from,content,read,deleted,ip,@987654@329@,@987654@330@,charname)值('3'、'1347396787'、'Chára'、'........'、'0'、'0'、'0.0.0.0:0000'、'C'、'óóóíííí'、' óóíííí');"

标签: c# .net mysql mysql-workbench


【解决方案1】:

我认为您需要更改列的字符集:

对那些使用 UTF-8 的列使用下面的代码。

ALTER TABLE database.table MODIFY COLUMN col VARCHAR(255)  
CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL;

【讨论】:

  • 谢谢,但是所有的列都已经是正确的字符集了。
【解决方案2】:

更新一下

INSERT INTO convos (`userid`,`time`,`from`,`content`,`read`,`deleted`, `ip`, `source`, `charname`, `to`) VALUES ('3', '1347396787', 'Chara', '........', '0', '0', '0.0.0.0:0000', 'C', 'óóóíííí', 'óóóíííí');

我认为你的第三个值中的“chara”给出了它

【讨论】:

    【解决方案3】:

    Unicode string prefix with N

    首先查看您的表 convos 并确保列数据类型是 nchar、nvarchar 和当您在 SQL Server 中处理 Unicode 字符串常量时,您必须在所有 Unicode 字符串前面加上前缀 N

    泰尔:

        insertQuery = "INSERT INTO convos (`userid`,`time`,`from`,`content`,`read`,`deleted`, `ip`, `source`, `charname`, `to`) VALUES
     (N'3', N'1347396787', N'Chára', N'........', N'0', N'0', N'0.0.0.0:0000', N'C', N'óóóíííí', N'óóóíííí')";
    

    【讨论】:

    • 它适用于 MYSQL,我不认为同样适用?
    【解决方案4】:

    我想通了,这需要一段时间,但似乎我设置字符集的频率太高了。数据库、表、列都是UTF8。当我建立连接时,连接字符串中有“CHARSET=UTF8”。每次我建立连接时,我也在运行“SET NAMES 'utf8' COLLATE 'utf8_general_ci'”。我删除了 CHARSET=UTF8 和 "SET NAMES 'utf8' COLLATE 'utf8_general_ci'" ,现在一切正常。

    【讨论】:

      【解决方案5】:

      对于尝试了所有建议但没有任何效果的人(如我自己),值得检查一下您的字段在 C# 中映射到的 MySQL 类型。我的文本字段被自动映射为 MySqlDbType.Blob,这导致了错误。我将类型更改为 MySqlDbType.Text,我再也看不到错误了。

      这是我对类似帖子的原始回复: https://stackoverflow.com/a/16989466/2199026

      【讨论】:

        【解决方案6】:

        如下配置mysql。从java或C#插入mysql时,它将解决unicode错误

        enter image description here

        【讨论】:

        • 您应该从图像中复制文本并将其放入代码格式中。在发布之前阅读 SO 指南。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-02-01
        • 2012-11-08
        • 2017-03-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-08-20
        相关资源
        最近更新 更多