我正在使用C#.NET Mysql Connector,并且在运行此查询时:
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插入查询或使用mysql命令行,它可以正常工作。我不知道连接器是否有错误,或者我需要在插入之前使用值做其他事情吗?
有什么想法吗?
由于
mysql中是否有任何内容可以转换为正确的类型?
答案 0 :(得分:1)
我相信你需要改变列的字符集:
使用以下代码表示使用UTF-8的那些列。
ALTER TABLE database.table MODIFY COLUMN col VARCHAR(255)
CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL;
答案 1 :(得分:1)
首先查看你的表convos并确保列数据类型是nchar,nvarchar之一,当你在SQL Server中处理Unicode字符串常量时,必须在所有Unicode字符串前面加上前缀N
丙氨酸Tyr:
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'óóóíííí')";
答案 2 :(得分:1)
我想出来了,它需要一段时间,但似乎我经常设置字符集。数据库,表,列都是UTF8。当我建立连接时,我在连接字符串中有“CHARSET = UTF8”。每当我建立连接时,我也在运行“SET NAMES'utf8'COLLATE'utf8_general_ci'”。我放弃了CHARSET = UTF8和“SET NAMES'utf8'COLLATE'utf8_general_ci'”,现在它全部正常工作。
答案 3 :(得分: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', 'óóóíííí', 'óóóíííí');
我认为你的第3个值中的“chara”会给它
答案 4 :(得分:0)
对于已经尝试过所有建议但没有任何工作的人(比如我自己),有必要检查您的字段在C#中映射到哪些MySQL类型。我的文本字段自动映射为 MySqlDbType.Blob ,这导致了错误。我将类型更改为 MySqlDbType.Text ,我不再看到错误。
这是我对类似线程的原始回复: https://stackoverflow.com/a/16989466/2199026
答案 5 :(得分:0)
配置mysql如下。从java或C#
插入mysql时,它将解决unicode错误