0

我正在使用 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 这样的 3rd 方工具来插入查询或使用 mysql 命令行,它工作正常。我不知道连接器是否存在错误,或者我需要在插入之前对这些值做其他事情?

任何的想法?

谢谢

mysql中有什么可以转换为正确的类型吗?

4

6 回答 6

1

我相信您需要更改列的字符集:

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

ALTER TABLE database.table MODIFY COLUMN col VARCHAR(255)  
CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL;
于 2012-09-12T07:33:02.357 回答
1

带有 N 的 Unicode 字符串前缀

首先查看您的表 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'óóóíííí')";
于 2012-09-12T07:39:17.487 回答
1

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

于 2012-10-12T09:35:16.603 回答
0

更新它

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”给出了它

于 2012-09-12T07:33:43.930 回答
0

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

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

于 2013-06-07T17:11:27.770 回答
0

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

在此处输入图像描述

于 2018-03-30T04:19:09.773 回答