1. 程式人生 > >如何解決MySQL中輸入中文報錯的情況1366 (HY000): Incorrect string value

如何解決MySQL中輸入中文報錯的情況1366 (HY000): Incorrect string value

如何在MySQL中輸入中文

經過我的不斷摸索,在MySQL建表後,往表中的varchar(255)中輸入中文時報錯,大概是因為資料庫的預設編碼模式是latin1而不是utf8。所以其它部落格就會叫你去修改my.ini配置檔案裡的資訊,或者說在MySQL介面裡設定,如下:

MySQL查詢程式碼:

show variables like'%char%';

結果:

+--------------------------+-----------------------------------------------------------+
| Variable_name            | Value                                                     |
+--------------------------+-----------------------------------------------------------+
| character_set_client     | utf8                                                      |
| character_set_connection | utf8                                                      |
| character_set_database   | utf8                                                      |
| character_set_filesystem | binary                                                    |
| character_set_results    | utf8                                                      |
| character_set_server     | latin1                                                    |
| character_set_system     | utf8                                                      |
| character_sets_dir       | /usr/local/mysql-5.7.21-macos10.13-x86_64/share/charsets/ |
+--------------------------+-----------------------------------------------------------+

當你 其中的Latin改為utf8就可以了,可是我都試過他們的方法修改my.ini配置檔案裡的資訊,或者說在MySQL介面裡設定(可以去部落格裡搜尋),但是我試了都沒有效果。後來我就用例外一種方法來解決:在MySQL中修改資料庫和表的編碼形式。

1.在建資料庫的時候修改預設編碼模式為utf8:

create database abcd DEFAULT CHARACTER SET utf8;

建立好表後可以通過如下程式碼檢視結果:

show create database databasename;
//databasename為你建立資料庫的名字

建立資料庫成功
然後就可以建立新表了,輸入中文了,這個資料庫中的所有表都可以輸入中文哦

2.已經建立了的資料庫和表

如果不想建立新的資料庫,可以只修改表的屬性

/ /查看錶的列的屬性
show full columns from tablename;

列的查詢結果
修改:

alter table tablename change columnsname columnsnamee varchar(255) 
character set utf8 collate utf8_unicode_ci not null default ''; 

//tablename:表名,columnsname:列名(注意這裡要輸入兩個列名,應該是舊列名和新列名,一般情況下不改變列名,就直接輸入兩個一樣的列名就可以了;然後再輸入上面的程式碼,檢視修改後的屬性,就可以了;但是要注意哦這隻能修改一個表的編碼形式,再在這個資料庫中建一個新表,他還是latinl 的編碼形式,還得修改哦;而且在修改的時候要保證表是一個空表哦,沒有資料。

3.為什麼latinl 不能輸入中文?

在latin1中,每個字元只有一個位元組長。在utf8中,一個字元可以由多個位元組組成。因此,utf8具有比latin1更多的字元(並且它們具有的字元不一定由相同的位元組/位元組序列表示)。
但是我們的中文漢字是要2個位元組還是3個位元組哦,所有latin1就不能儲存漢字啦。
皮一下!