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として指定されている場合、タプルデータは後続のデータに正常に挿入できます。