2011-06-19 10 views
6

以前はSQL Server 2005をウェブサイトデータベースとして使用していますが、すべて正常に動作します。 今私はMySqlサーバーに変更しました。データベースはオープンソースであるためです。MySqlの例外:変数 'c​​haracter_set_client'を 'utf16'の値に設定することはできません

私はNavicat Premiumを使用して、SQL Serverからmysqlに自分のデータを転送しました。私はデータベースを管理するためにmysqlのworkbenchとnavicatを使用します。 mysqlデータベースへの接続を宣言するときに問題が発生します。ここに私のコード:

MySqlCommand cmdselect; 
    MySqlConnection conNDB; 
    MySqlDataReader Mydtr; 
    string server = "localhost"; 
    string database = "maindb"; 
    string uid = "root"; 
    string password = "abc123"; 
    string strCon = "SERVER=" + server + ";" + "DATABASE=" + 
    database + ";" + "UID=" + uid + ";" + "PASSWORD=" + password + ";"; 
    string strSelect = "SELECT * FROM announcement"; 

    conNDB = new MySqlConnection(strCon); 
    conNDB.Open(); 
    cmdselect = new MySqlCommand(strSelect, conNDB); 
    Mydtr = cmdselect.ExecuteReader(); 

    rptAnnounce.DataSource = Mydtr; 
    rptAnnounce.DataBind(); 

    Mydtr.Close(); 
    conNDB.Close(); 

MySql.Dataへの参照は既に設定されています。

例外の詳細:ここで私は、このエラーメッセージが表示されました MySql.Data.MySqlClient.MySqlException: 変数「character_set_clientは」 は エラーメッセージは、このエラーが発生述べた「UTF16」の値に設定することはできません接続中.Open();

私はエラーページをリフレッシュし続けると、いつか別のエラーが発生します。ここにある:

例外の詳細: エラーメッセージは、このエラーがMydtr = cmdselect.ExecuteReader()中に発生述べたデータパケットの期待終わり;:MySql.Data.MySqlClient.MySqlException

私はmysqlが初めてです。何が問題なのか分かりません。私はこの問題は、データベースの設定やデータから来て、私のソースコードではないと思います。

誰もが解決策を知っていますか?あなたの助けが大いに評価されます。私は4日間試してみましたが解決できません。

+0

あなたのcharacter_set_client変数の値がデータベースにあることを確認してください。mysqlクエリを使用して表示することができます。 「文字%」のように表示されます –

+0

RTEE、すべてがutf8に入っています。あなたのチュートリアルであなたの返信に投稿しました^^。 ここにリンクがあります:http://www.codeproject.com/Messages/3932728/Re-i-got-some-bugs.aspx –

+0

私は同様の問題を遭遇しました。私の文字セットはlatin1でした。これは昔はデフォルトでした。問題のあるクエリのテーブルと列でutf8に変更され、問題は解決されました。なぜlatin1は、いくつかのテーブルがutf8で、他がlatin1であり、それがミックスを好きではないことを除いて、問題を引き起こすのではないかと確信している。 –

答えて

3

解決をlatin1の! ! @Etienne Rachedと@jeremiのおかげで

すべての問題は文字セットの問題から発生します。

解決方法:データベースとすべての単一テーブルのキャラクタセットを変更するには、navicatをダウンロードします。

あなたがチェックする必要が2ヶ所あります。

1)は、データベースなどを右クリックします。 myDb。次にプロパティを選択して文字セットを設定します

2)テーブルを右クリックしてデザインテーブルを選択します。文字セットを変更するために1行ごとにクリックし、最後に「オプション」タブに行き、文字セットを変更してください。

あなたの情報について:これはまれなケースです。私はそれがほとんど解決策を見つけることができないGoogle。私はこのミスをMySQLのインストール中に作成しましたが、私はutf16形式を選択しました> <

途中で、簡単な接続が動作します。 like

"server=localhost;database=maindb;uid=root;pwd=abc123;CharSet=utf8; port=3306"; 
2

あなたはutf16と話そうとしているかもしれませんが、データベースはutf8またはその他のものだけをサポートしている可能性があります。あなたの接続文字列にこれを追加すること

試してみてください。

Character Set=utf8 

私の接続文字列は次のようになります。

"server=" + settings.DatabaseHost + 
";User Id=" + settings.DatabaseUsername + 
";password="+ settings.DatabasePassword + 
";database="+ settings.DatabaseName+ 
";Persist Security Info=True" + 
";Connect Timeout=5;Default Command Timeout=10" + 
";Character Set=utf8"; 

そのdoes't作業する場合は、ASCIIを試したり

+0

助けてくれてありがとう。私はそれをgoogledしました。この解決策が見つかりません: 例外の詳細:System.Collections.Generic.KeyNotFoundException:指定されたキーが辞書に存在しませんでした。 –

+0

私は、文字セット= utf8を追加すると、このエラーが発生する:P –

3

こんにちは。

MySQL 5.5バージョン以降、utf16またはutf32の文字セットエンコーディングはサポートされていません。

DBへの接続

  • DB自体、クライアント側では
  • を作るの両方

    1. クライアント、それはとDBへのクエリを呼び出すから見する必要が物事のカップルがあります。特定のフォーマットでエンコードされたクエリおよびサーバはそのままこれらのクエリを理解し、クライアントが順に理解できる特定のフォーマットで応答する必要があります。

      ポイント1:だから我々は

      Charset=utf8; 
      

      として接続文字列では、クライアントレベルで文字セットを設定する必要があり、順番に、あなたは、クエリを求めている先のDBとテーブル(に確認する必要がありトランザクション)文字セットと照合

      柔軟性

      1. 文字セット用のMySQLサーバで文字セットと照合をコードする4つのレベルがあります。表の列のためにも

    2. 文字セット用のデータベース
    3. 文字セットのために、サーバ全体のserver_character_set
    4. 文字セットのためにあなたは、だから、ポイントを次のクエリ

      show variables like 'character%'; 
      show variables like '%collation%'; 
      

      を使用して、これらの値をチェックすることができますDBサーバーは、接続文字列で指定されたエンコーディングでこれらのクエリを読み取ります。

      ポイント2代わりに、接続文字列で文字セットを指定して、あなたはまた、クエリで(サーバが中断した)クライアントの文字セットを設定することができ、接続

      set names 'charset'; 
      Ex: set names 'utf8'; 
      

      を開いた後、3があります。クライアントからサーバーへの文字セット固有の問題で重要なサーバーパラメーター character_set_client - サーバーは、渡されたクライアント照会の指定された文字セットを に設定します。character_set_connection - サーバーは接続トランザクションに指定された文字セットを設定します。 character_set_results - Serv ER返された結果のために、指定された文字セットを設定し、DBからクライアントにエラーメッセージ

      ポイント3代わりに、ポイント1のと2、あなたは

      基本的には、適切なクライアント・サーバ・トランザクションを確実にするためにDBにこれらの変数を設定することができますクライアントとDB(サーバー、dbテーブル、列)エンコーディングと照合の種類は、DBトランザクション中のデータ損失を避けるために似ていなければなりません。このことができます

      希望.....

    1

    このエラー「例外の詳細:System.Collections.Generic.KeyNotFoundExceptionは:」あなたは、接続文字列の文字がに​​設定アップグレードした後、あなたのMySQLクライアントライブラリをアップグレードしていない場合に発生する可能性がありますutf8mb4

    最新6.6.5.0

    にMySql.data.dllライブラリのバージョンを更新してくださいが、これは例外を見つけていないキーを解決する必要があります願っています。

    関連する問題