MySQLは、テーブルに中国語を挿入するときにエラーを報告しました:ERROR 1366(HY000)/ Incorrect string value / '\ xE6 \ x9D \ x8E \ xE5 \ x8B \ x87' for column'S

1.エラープロンプト

エラー1366(HY000):文字列値が正しくありません:行1の列 'Sname'の '\ xE6 \ x9D \ x8E \ xE5 \ x8B \ x87'

2.プロセスの説明

1.次のテーブルを作成します
#建立一个学生表 
Create TABLE Student
	(Sno CHAR(9) PRIMARY KEY not null,/*列级完整性约束,Sno是主码*/
   Sname CHAR(20) not null,
   Ssex CHAR(2),
   Sage SMALLINT,
   Sdept CHAR(20)
  );
2.次のタプルを挿入します
#向学生表插入数据
insert 
into Student(Sno,Sname,Ssex,Sage,Sdept)
values('201215121','李勇','男',20,'CS');
3.エラーは次のとおりです
ERROR 1366 (HY000): Incorrect string value: '\xE6\x9D\x8E\xE5\x8B\x87' for column 'Sname' at row 1
  • エラーの解釈:1行目の「sname」列の文字列値\xE6\x9D\x8E\xE5\x8B\x87が正しくありません
  • エラーの理由:確立されたデータテーブルのデフォルトの文字セットがlatin1であり、latin1の文字セットが8ビットであり、中国語を表すことができないため、エラーが報告されます。

三、解く

1.テーブルを表示して構造を構築します
 show create table Student;
  • 次のように表示されます
    ここに画像の説明を挿入

  • 最後の行の説明によると、デフォルトのテーブル文字セットエンコーディングはlatin1です。

2.テーブルの文字セットエンコーディングをutf8に変更します
alter table Student default character set utf8;
  • テーブルをもう一度表示して、構造を構築します

     show create table Student;
    
  • 次のように表示されます

    ここに画像の説明を挿入

  • 最後の行の説明によると、デフォルトのテーブル文字セットエンコーディングがutf8に変更されました

  • ただし、タプルデータがテーブルに再度挿入された場合でも、エラーが報告されます

    ERROR 1366 (HY000): Incorrect string value: '\xE6\x9D\x8E\xE5\x8B\x87' for column 'Sname' at row 1
    
  • その理由は、上記の知識によってテーブルの文字セットエンコーディングがutf8に変更されたが、属性列の文字セットエンコーディングはまだlatin1であるためです(上の図の赤い長方形に示されているように)

3.属性列の文字セットエンコーディングをutf8に変更します
alter table Student change Sname Sname varchar(20) character set utf8;
  • テーブルをもう一度表示して、構造を構築します

  • 次のように表示されます

    ここに画像の説明を挿入

  • 最後の行の説明によると、属性列Snameの文字セットエンコーディングがデフォルトのutf8に変更されました。

  • テーブルにデータを再度挿入すると、エラーは属性列Ssexに変更され、変更されたばかりの属性列Snameの文字セットエンコーディングが渡されたことを示します。

    ERROR 1366 (HY000): Incorrect string value: '\xE7\x94\xB7' for column 'Ssex' at row 1
    
  • 次に、属性列Ssexの文字セットエンコーディングをutf8に変更します。

    alter table Student change Ssex Ssex varchar(20) character set utf8;
    
  • タプルデータをテーブルに再度挿入すると、通常どおり挿入できます

    ここに画像の説明を挿入

  • 他の属性列の文字セットエンコーディング方法がまだlatin1であり、エラーが報告される場合は、上記の方法のようにutf8に変更を続けます。

4.データテーブルに漢字がある場合、テーブルを作成するときに、文字セットのエンコード方法をutf8として指定する必要があります。
#建立一个学生表 
Create TABLE Student
	(Sno CHAR(9) PRIMARY KEY not null,		/*列级完整性约束,Sno是主码*/
   Sname CHAR(20) not null,
   Ssex CHAR(2),
   Sage SMALLINT,
   Sdept CHAR(20)
  )ENGINE=InnoDB DEFAULT CHARSET=utf8;
  • テーブルの作成時に文字セットのエンコーディングがutf8として指定されている場合、タプルデータは後続のデータに正常に挿入できます。

おすすめ

転載: blog.csdn.net/szw_yx/article/details/104695519