проблема с ивритом - MySql, c#

у меня проблема с вставкой строк на иврите в MySql.

Введение

  1. Я установил MySql на Utf8.
  2. Я установил таблицу как кодировку utf8 с сопоставлением uft8_general_ci
  3. Я установил строку подключения следующим образом: "Server=;Database=;Uid=;Pwd=; charset=utf8;"
  4. Я пишу хранимую процедуру для ее использования С#.
  5. Версия MySql: 5.1.53

когда я просто вставляю строку на иврите в таблицу с помощью MySql:

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

я видел как правильно. если я установлю хранимую процедуру, как она ... я вижу тарабарщину.

когда я вызываю его с помощью С#, я получаю исключение как "Неверное строковое значение:"\xD7\xAA\xD7\xA8..." для столбца..."

если я вставлю английские строки, я получу все правильно.

Есть идеи?


person David Michaeli    schedule 31.12.2010    source источник
comment
Можете ли вы опубликовать код С#, который вы используете для вставки значения? И покажите определение столбца, пожалуйста.   -  person Oded    schedule 31.12.2010
comment
Можете ли вы показать как ваш сохраненный процесс, так и код, который вы используете для его вызова из С#?   -  person Basic    schedule 31.12.2010
comment
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   -  person David Michaeli    schedule 31.12.2010
comment
DELIMITER $$ DROP PROCEDURE IF EXISTS test.SPInsertUpdateCity$$ CREATE DEFINER=root@localhost PROCEDURE SPInsertUpdateCity( в SP_CityName VARCHAR(100), в SP_CitySynonyms mediumtext, в SP_CityNumberPostOffice varchar(100), в SP_CityUpdatedDate date) НАЧАТЬ, если(не существует(выбрать CityID из города, где CityName = SP_CityName)) затем вставить в city(CityName, CitySynonyms, CityNumberPostOffice ,UpdatedDate) значения (SP_CityName, CONCAT(',',SP_CitySynonyms, ','),SP_CityNumberPostOffice,SP_CityUpdatedDate);   -  person David Michaeli    schedule 31.12.2010
comment
else if((exists(выберите cityId из города, где CityName = SP_CityName и (UpdatedDate ‹ SP_CityUpdatedDate или UpdatedDate = SP_CityUpdatedDate))) и не существует(SELECT CitySynonyms FROM city WHERE CitySynonyms in(выберите CitySynonyms из города, где CitySynonyms, такие как CONCAT('%, ',SP_CitySynonyms,',%')))) затем обновите набор городов CitySynonyms = CONCAT(CitySynonyms,SP_CitySynonyms,','),UpdatedDate = SP_CityUpdatedDate; закончить, если; закончить, если; КОНЕЦ$$ DELIMITER ;   -  person David Michaeli    schedule 31.12.2010
comment
MySqlConnection conn = new MySqlConnection(); conn.ConnectionString = строка соединения; MySqlCommand cmd = GetMySqlCommand (новая строка [] { SP_CityName, SP_CitySynonyms, SP_CityNumberPostOffice, SP_CityUpdatedDate}, xml); cmd.CommandText = SPInsertUpdateCity; cmd.CommandType = System.Data.CommandType.StoredProcedure; cmd.Connection = соединение; соединение.Открыть(); cmd.ExecuteNonQuery();   -  person David Michaeli    schedule 31.12.2010
comment
код GetMySqlCommand: MySqlCommand cmd = new MySqlCommand(); for (int i = 0; i ‹ attribute.Length; i++) { XmlNode node = xml.SelectSingleNode(// + attribute[i]); если (узел != ноль) { строковое значение = узел.InnerText; cmd.Parameters.AddWithValue(@ + атрибуты[i], значение); cmd.Parameters[@ + атрибуты[i]].Direction = System.Data.ParameterDirection.Input; } } вернуть команду;   -  person David Michaeli    schedule 31.12.2010


Ответы (3)


Вы сказали, что установили таблицу как кодировку UTF8, но вы также установили кодировку столбца в UTF8?

И/или попробуйте отправить команду SET NAMES utf8; в MySql до выполнение вашей хранимой процедуры.

SET NAMES указывает, какой набор символов будет использовать клиент для отправки операторов SQL на сервер. Таким образом, SET NAMES 'cp1251' сообщает серверу, что «будущие входящие сообщения от этого клиента будут иметь набор символов cp1251». Он также определяет набор символов, который сервер должен использовать для отправки результатов обратно клиенту. (Например, он указывает, какой набор символов использовать для значений столбца, если вы используете оператор SELECT.)

person Michael Low    schedule 31.12.2010
comment
я тоже устанавливаю столбцы как utf8.. это не помогает :(. я также пытаюсь отправить набор имен utf8; мой командующий mysql.. он говорит, что запрос в порядке, затронуты 0 строк... show: 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 строк в наборе (0,00 сек) - person David Michaeli; 31.12.2010
comment
«установить имена» влияет только на это конкретное соединение, а не на общую настройку mysql. Вы пытались отправить «набор имен» непосредственно перед вашей хранимой процедурой, находясь в том же соединении? - person Michael Low; 31.12.2010
comment
Кроме того, попробуйте использовать программу администрирования Mysql, например sqlyog или phpmyadmin, чтобы вставить некоторые тестовые данные. Это должно помочь увидеть, связана ли проблема с кодом подключения C# или структурой базы данных. - person Michael Low; 31.12.2010

я добавил в хранимую процедуру кодировку utf8

в SP_CityName VARCHAR(100) кодировка utf8, в SP_CitySynonyms кодировка среднего текста utf8

и теперь он работает нормально... большое спасибо всем вам.

person David Michaeli    schedule 31.12.2010

Используйте Text/LongText вместо varchar. Также используйте Collation как utf8_general_ci

person besin    schedule 13.12.2012