問題一:用mysql定義表的資料為char,在插入資料時,發現不能插入中文字元。
解決:理解資料庫幾個字元型別區別
1、char。char儲存定長資料很方便,char欄位上的索引效率級高,比如定義char(10),那麼不論你儲存的資料是否達到了10個位元組,都要占去10個位元組的空間,不足的自動用空格填充,所以在讀取的時候可能要多次用到trim()。
2、varchar。儲存變長資料,但儲存效率沒有char高。如果乙個字段可能的值是不固定長度的,我們只知道它不可能超過10個字元,把它定義為 varchar(10)是最合算的。varchar型別的實際長度是它的值的實際長度+1。為什麼「+1」呢?這乙個位元組用於儲存實際使用了多大的長度。從空間上考慮,用varchar合適;從效率上考慮,用char合適,關鍵是根據實際情況找到權衡點。
3、text。text儲存可變長度的非unicode資料,最大長度為2^31-1(2,147,483,647)個字元。
4、nchar、nvarchar、ntext。這三種從名字上看比前面三種多了個「n」。它表示儲存的是unicode資料型別的字元。我們知道字元中,英文本元只需要乙個位元組儲存就足夠了,但漢字眾多,需要兩個位元組儲存,英文與漢字同時存在時容易造成混亂,unicode字符集就是為了解決字符集這種不相容的問題而產生的,它所有的字元都用兩個位元組表示,即英文本元也是用兩個位元組表示。nchar、nvarchar的長度是在1到4000之間。和char、varchar比較起來,nchar、nvarchar則最多儲存4000個字元,不論是英文還是漢字;而char、varchar最多能儲存8000個英文,4000個漢字。可以看出使用nchar、nvarchar資料型別時不用擔心輸入的字元是英文還是漢字,較為方便,但在儲存英文時數量上有些損失。
所以一般來說,如果含有中文字元,用nchar/nvarchar,如果純英文和數字,用char/varchar
問題二:在不能輸入中文字元時,誤以為是編碼出錯,於是修改了編碼。
解決:學習新編碼之後再次儲存看執行結果,然後改回
-- 建立資料庫時,設定資料庫的編碼方式
-- character set:指定資料庫採用的字符集,utf8不能寫成utf-
8-- collate:指定資料庫字符集的排序規則,utf8的預設排序規則為:
utf8_general_ci(通過show character set檢視)
drop database if exists dbtest;
create database dbtest character set utf8 collate utf8_general_ci;
1
-- 修改資料庫編碼
2 alter database dbtest character set gbk collate gbk_chinese_ci;
3 alter database dbtest character set utf8 collate utf8_general_ci;
-- 建立表時,設定表、字段編碼
use dbtest;
drop table if exists tbtest;
create table tbtest
(id int(10
) auto_increment,
user_name varchar(60
) character set gbk collate gbk_chinese_ci,
email varchar(60
),primary key
(id)
)character set utf8 collate utf8_general_ci;
-- 修改表編碼
alter table tbtest character set utf8 collate utf8_general_ci;
-- 修改字段編碼
alter table tbtest modify email varchar(60
) character set utf8 collate utf8_general_ci;
-- 檢視所有的字元編碼
show character set;
-- 檢視建立資料庫的指令並檢視資料庫使用的編碼
show create database dbtest;
-- 檢視資料庫編碼:
show variables like '%char%'
;
--粗暴的改編碼指令
set character_set_client=utf8/gbk;
set character_set_connection=utf8/gbk;
set character_set_database=utf8/gbk;
set character_set_results=utf8/gbk;
set character_set_server=utf8/gbk;
set character_set_system=utf8/gbk;
set collation_connection=gbk/utf8_general_ci;
set collation_database=utf8/gbk_general_ci;
set collation_server=utf8/gbk_general_ci;
alter table table_name default character set utf8/gbk utf8/gbk_general_ci;
總結部分**:
建立資料庫時,設定資料庫的編碼方式
僅用於個人學習紀錄總結,侵權立刪
ORACLE資料庫檢視編碼及修改編碼
system 使用者登入sqlplus sys是sysdba使用者,不能直接登入 sysdba登入 conn as sysdba 檢視資料庫字符集 select userenv language from dual 我機器上顯示的是 simplified chinese china.zhsgbk 下...
如何Linux系統修改編碼
linux的預設編碼為utf 8,在crt下顯示為亂碼。為了解決此問題,修改linux的預設編碼為gbk。方法如下 方法1 vi etc sysconfig i18n 預設為 lang en us.utf 8 sysfont latarcyrheb sun16 修改為 lang zh cn.gbk ...
linux下檢視檔案編碼及修改編碼
通常來說,windows中預設的檔案格式是gbk gb2312 而linux一般都是utf 8,所以linux下開啟windows的檔案會有亂碼的情況。另外,有時要將檔案進行編碼轉換,如將簡體中文轉換為正體中文。vim中查詢修改檔案編碼格式 set fileencoding 檢視現在文字的編碼 se...