1. 程式人生 > >mysql優化_建表字段型別varchar,char的選擇

mysql優化_建表字段型別varchar,char的選擇

在建立資料庫表結構的時候對了String型別的資料我們經常會糾結資料庫給他設定成什麼資料庫型別呢? 一般都是參考char和varcahr,

下面明確總結下這兩種資料庫型別的區別:

           首先明確的是char的長度是不可以變的,而varchar的長度是可變的,也即是說,定義一個char[10]和varchar[10],如果存進去的是'abcd',那麼char所佔的長度仍然是10,除了abcd四個字元外,後面會新增留個空格,而varchar就立馬將長度變為4了。

           取資料時char型別要用trim()去掉多餘的空格,而varcahr是不需要的,儘管如此,char的儲存速度還是要比varchar要快的多,因為其長度固定,方便程式的儲存和查詢;單是char也為此付出的是空間的代價,因為其長度固定,所以難免會有多餘的空格佔位符佔據空間,可謂是一空間換取時間效率。

           然後對於兩者的儲存方式,對英文字元(ASCII)佔用一個位元組,對一個漢子佔用兩個位元組;而varcahr的儲存方式是,對每個英文字元佔用兩個位元組,漢子也佔用2個位元組,兩者的儲存資料都非unicode的字元資料。

所以比如像身份證號,銀行卡號,這種長度不變的字串型別個人覺得可以選擇char進行儲存更好。

相關推薦

mysql優化_表字型別varcharchar選擇

在建立資料庫表結構的時候對了String型別的資料我們經常會糾結資料庫給他設定成什麼資料庫型別呢? 一般都是參考char和varcahr, 下面明確總結下這兩種資料庫型別的區別:            首先明確的是char的長度是不可以變的,而varchar的長度是可變的,

Java實體類的屬性型別mysql資料庫表字型別對應表

感謝原文博主https://blog.csdn.net/Hyo555/article/details/81943340 還有些經常用到的mysql語句 -- 新增表結構 DROP TABLE IF EXISTS `servicnn`; CREATE TABLE `servin` ( `id` i

MySQL 表字長度的限制

root@localhost : test 10:30:54>CREATE TABLE tb_test ( -> recordid varchar(32) NOT NULL, -> areaShow varchar(10000) DEFAULT NULL, -&

mysql數據庫表字使用DESC等關鍵字報錯及解決方法

直接 方式 sel max desc base 字段名 字段 方法 <!-- desc是MySQL數據庫的關鍵字,作為字段名直接使用會報錯 --><sql id="Base_Column"> id,mol,ip,port,name,t.desc,m

mysql 不同庫不同表字數據復制

upd 報錯 另一個 tid null manager inner target cau 需求:把一個表某個字段內容復制到另一張表的某個字段。 實現sql語句1: UPDATE file_manager_folder f1 LEFT OUTER JOIN file_ma

MySQL索引使用:字varchar類型時條件要使用''包起來

row prim was OS con xtra str fault 建表語句 結論: 當MySQL中字段為int類型時,搜索條件where num=‘111‘ 與where num=111都可以使用該字段的索引。當MySQL中字段為varchar類型時,搜索條件whe

flask-migrate 更改表字型別、欄位長度

最近在開發過程中遇到了需要將string型別轉換成bool型別的問題,但是一開始設計表是設計成了string型別,因此記錄下flask-migrate更改表字段型別的方式。 alembic支援檢測欄位長度改變,不過它不是預設的,需要配置; 找到migrations/env.py檔案

mysql 優化系列之欄位型別選取

mysql  優化是一個很有意思的話題,可以從很多方面來說,大到伺服器叢集,應用體系架構等,小到欄位型別選擇,儲存引擎的選擇等,隨著mysql的發展,到目前(最新版本是8.0,筆者5.7)Innodb 已是預設的儲存引擎(mysql 5.5 已將InnoDB作為預設儲存引擎)

Oracle筆記之修改表字型別

Mysql對於有資料和沒資料的表字段型別都可以隨意修改,不過oracle就不一樣。 假如表A有個欄位a,本來為number型別,然後我們想修改為varchar2型別。 (1)欄位a沒資料的情況,改為va

資料庫統計表字資訊

資料庫統計 1.統計資料庫中標的欄位資訊(欄位名字,欄位約束,欄位型別,欄位註釋等,建表的資訊都儲存在information_schema資料庫中,這個資料庫是mysql預設就有的,查詢sql語句如下(只需要把表名稱換成自己的表名即可執行): USE information_sche

Oracle 修改資料庫表字型別

alter table ACT_HI_TASKINST modify (DESCRIPTION_ VARCHAR2(4000)); alter table ACT_HI_TASKINST modify (DELETE_REASON_ VARCHAR2(4000)); 參考網址: ht

mybatis-generator 無法自動生成表字型別為 text 的屬性

問題描述: 在使用mybatis-generator 自動生成外掛時,關於資料庫表中欄位型別為 text 的欄位無法對映到自動生成的 JavaBean 中。 比如訊息表 t_message_info 中的 message_content 欄位為 text型別

資料庫-設計-資料庫表字型別設計標準

常用型別:日期,數字 字串,文字 日期:最好用字串 數字:需要排序的列用數字,因為字串排序錯誤; 字串:能不用數字的都用字串; 文字:長字串; 綜上:資料型別: 數字:需要排序列; 文字:長字串; 字串:用來表示日期,不用排序的數字,2000以內的字串;

Teradata 修改表字型別

在 Teradata 資料庫環境中,如何修改一個已經存在記錄的表字段型別呢? 因為不能通過 alter 方式直接修改欄位型別。要麼先 alter drop 欄位,再 alter add 欄位。但是這樣會丟失欄位的資料。 我們可以先通過 create tableA

java根據漢字轉拼音多音字人工處理資料庫表字型別為nvarchar,其它要亂碼

package com.zsjz.utils.tools; import net.sourceforge.pinyin4j.PinyinHelper; import net.sourceforge.pinyin4j.format.HanyuPinyinCaseType; i

如何實現一個表字資料變化另一張表中資料隨著變化

資料表1(db_integrityevent): 資料表2:(db_corporatecreditscore): navicat觸發器寫法: 可以實現表中相關資料變化,表中其他跟隨這變化。 mysql命令列寫法: delimiter $$ for each row B

mysql int轉換成string時型別要用char

欄位:number  是integer型別    在表test中 select cast(number as char) as number from test;   或者convert()方法 因為轉換的時候mysql不支援轉換成varchar所有要轉成char.

資料庫型別——varchar,varchar2&char

可變長度字串和不可變長度字串 varchar和varchar2在資料庫的定義都是可變長度的字串,這點和char不同,char是不可變長度。注意,這裡指的可變和不可變是指儲存在資料庫中的長度。 比如在表中定義一個欄位的型別為char(20),插入abc的時候,

Oralce 表字為關鍵字查詢不準確

在oracle資料庫,有一張表,其中有個level欄位,select * 的時候,level的資料是對的,但是如果我select level的話,查出來level的欄位值都是0。 在SQL Serv

Mysql優化-為表字新增索引

1.新增PRIMARY KEY(主鍵索引): ALTER TABLE `table_name` ADD PRIMARY KEY ( `column` )  2.新增UNIQUE(唯一索引) : ALTER TABLE `table_name` ADD U