如何解決MySQL中輸入中文報錯的情況1366 (HY000): Incorrect string value
阿新 • • 發佈:2018-12-03
如何在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就不能儲存漢字啦。
皮一下!