【问题标题】:problem with hebrew - MySql, c#希伯来语的问题 - MySql,c#
【发布时间】:2010-12-31 16:05:12
【问题描述】:

我在将希伯来语字符串插入 MySql 时遇到问题。

简介

  1. 我将 MySql 设置为 Utf8。
  2. 我将表设置为字符集 utf8 并带有排序规则 uft8_general_ci
  3. 我将连接字符串设置为:“Server=;Database=;Uid=;Pwd=;charset=utf8;”
  4. 我编写了存储过程供c#使用。
  5. MySql 版本:5.1.53

当我通过 MySql 将希伯来语字符串插入表时 因为它:

insert into temp_table (temp_column) values ('ערך')

我认为是正确的。 如果我将存储过程设置为它..我看到胡言乱语。

当我通过 c# 调用它时,我得到异常为'Incorrect string value: '\xD7\xAA\xD7\xA8...' for column...'

如果我插入英文字符串,那么我得到的都是正确的。

有什么想法吗?

【问题讨论】:

  • 您能发布用于插入值的 C# 代码吗?请同时显示列定义。
  • 你能同时显示你的存储过程和你用来从 C# 调用它的代码
  • CREATE TABLE city (CityID int(20) NOT NULL AUTO_INCREMENT, CityName varchar(100) NOT NULL, CitySynonyms mediumtext, CityNumberPostOffice varchar(100) DEFAULT NULL, UpdatedDate date DEFAULT NULL, PRIMARY KEY (CityID) ENGINE=InnoDB DEFAULT CHARSET=utf8
  • DELIMITER $$ DROP PROCEDURE IF EXISTS test.SPInsertUpdateCity$$ CREATE DEFINER=root@localhost PROCEDURE SPInsertUpdateCity( in SP_CityName VARCHAR(100) medium, in SP_CitySynony在 SP_CityNumberPostOffice varchar(100) 中,在 SP_CityUpdatedDate 日期中)开始 if(不存在(从 CityName = SP_CityName 的城市中选择 CityID))然后插入城市(CityName,CitySynonyms,CityNumberPostOffice,UpdatedDate)值(SP_CityName,CONCAT(',', SP_CitySynonyms, ','),SP_CityNumberPostOffice,SP_CityUpdatedDate);
  • else if((exists(select cityId from city where CityName = SP_CityName and (UpdatedDate

标签: c# mysql hebrew


【解决方案1】:

您说您将表设置为字符集 UTF8,但您是否也将列编码设置为 UTF8 ?

和/或在执行存储过程之前尝试对 MySql 使用 sending a SET NAMES utf8; 命令。

SET NAMES 表示什么字符集 客户端将用于发送 SQL 向服务器声明。因此,SET NAMES 'cp1251' 告诉服务器, “未来传入的消息 客户端在字符集 cp1251 中。” 它还指定字符集 服务器应该用于发送 结果返回给客户。 (为了 例如,它表示什么字符 如果您设置为用于列值 使用 SELECT 语句。)

【讨论】:

  • 我也将列设置为 utf8.. 这无济于事:(。我也尝试发送集合名称 utf8;我的 mysql 指挥官.. 它说查询正常 0 行受影响...显示:mysql > 显示像 'char%' 这样的变量;| 变量名 | 值 | character_set_client | utf8 | character_set_connection | utf8 | character_set_database | utf8 | character_set_filesystem | binary | character_set_results | utf8 | character_set_server | utf8 | character_set_system | utf8 8 行 in set (0.00 sec)
  • 'set names' 仅影响该特定连接,它不是一般的 mysql 设置。您是否尝试过在存储过程之前立即在同一连接上发送“设置名称”?
  • 另外,尝试使用 sqlyog 或 phpmyadmin 之类的 Mysql 管理程序插入一些测试数据。这应该有助于查看问题是出在您的 C# 连接代码还是数据库结构中。
【解决方案2】:

我添加到存储过程字符集 utf8

在 SP_CityName VARCHAR(100) 字符集 utf8 中, 在 SP_CitySynonyms mediumtext charset utf8

现在它工作正常...非常感谢你们。

【讨论】:

    【解决方案3】:

    使用 Text/LongText 代替 varchar。也使用排序规则作为 utf8_general_ci

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-06
      • 2014-10-03
      • 2014-05-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多