看板 ask 關於我們 聯絡資訊
一切都相同的情況下 以給實際字串大小來給空間的儲存格模式 來存在資料庫裡 來看 同位數 純英文字串 還是純數字字串 佔的空間大 哪個比對比較快? 網頁程式加密會影響效率嗎? -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 220.136.47.209 ※ 文章網址: https://www.ptt.cc/bbs/ask/M.1449241324.A.9EE.html
Lv10: 印象中好像跟ascii code的編碼轉2進制有關 12/04 23:15
talk5566: 一開始想說這是啥鬼問題 後來想想好像還挺難的?? 12/04 23:16
APM99: 幹嘛不寫個程式跑跑看就知道了 .. 12/04 23:17
winken2004: 一樣大/一樣快 12/04 23:19
badbadook: 英文字不是占1byte 阿拉伯字不是4bit 12/04 23:22
bt222: 這系列問題你還要問幾篇 12/04 23:24
APM99: 自己實作看看不就行了 12/04 23:39
ctrlbreak: 1. 字串沒有純什麼的, 都一樣慢. 2.效率當然有影響. 12/04 23:53
ctrlbreak: 你是在跟人打賭嗎? 12/04 23:54
badbadook: 英文占byte比較多 英文字串不是應該占空間比較大 12/04 23:55
badbadook: 英文字比阿拉伯數字多 字碼也比較長 所以讀完辨識應 12/04 23:57
ctrlbreak: 字串就是字串沒有什麼英文數字之分 12/04 23:57
badbadook: 比較久的時間 12/04 23:57
OrzOGC: string vs string or string vs int 12/04 23:58
ctrlbreak: 能放在cpu暫存器裡運算的才是數字, 字串都是在放記憶 12/04 23:59
ctrlbreak: 體裡做處理所以都一樣慢. 12/05 00:00
kobe8112: 在說啥?是要比對字串的什麼也沒講 12/05 00:00
badbadook: 假設是一堆五位純英文字串 比對出apple字串 12/05 00:03
badbadook: 一堆六位純拉伯數字字串 比對出123456 12/05 00:03
※ 編輯: badbadook (220.136.47.209), 12/05/2015 00:07:09
ctrlbreak: 你前面的po文例子不是這樣 XD 12/05 00:06
kobe8112: 一個五位一個六位不就不符合你文章第一行了嗎? 12/05 00:07
badbadook: apple字串 跟 12345字串 放到資料庫裡誰占容量大 12/05 00:09
badbadook: 那些英文字串是同位數阿 12/05 00:10
ctrlbreak: apple'字串' 12345'字串' 一樣大 12/05 00:10
wxtab019: 用程式來想的話 就想都是char 或是int占多少空間 12/05 00:12
wxtab019: 不過你說都用一樣的 所以占的空間都一樣 12/05 00:12
badbadook: 所以sizeof()他們會一樣大 12/05 00:12
badbadook: 所以 apple'字串' 12345'字串' 一樣大? 12/05 00:14
badbadook: 英文有26個字母 字碼位數又多 讀完再筆會比較慢吧? 12/05 00:16
badbadook: 英文字碼佔位多 那不是同位數自串占的容量比較大嗎? 12/05 00:19
kobe8112: 不是 12/05 00:20
badbadook: 為何?y 12/05 00:24
kobe8112: 因為你沒有先了解字串是怎麼儲存的 12/05 00:26
badbadook: 不好一絲我再說清楚 我是說它存在資料庫里歐 12/05 00:27
kobe8112: 存在哪裡跟怎麼存的是不一樣的問題 12/05 00:28
※ 編輯: badbadook (220.136.47.209), 12/05/2015 00:29:15
wxtab019: 比對字串和英文有26個字母沒有關係吧 12/05 00:36
badbadook: 所以在資料庫裡一個英文阿拉伯數字中文字串都占一 12/05 00:37
badbadook: byte 12/05 00:37
badbadook: 偶對是帶比較字串的字碼 但英文字碼不是比較長 12/05 00:38
badbadook: 不對阿 你讀了那個字串 要把他轉成字碼才能比對 12/05 00:40
badbadook: 阿 12/05 00:40
kobe8112: 你是自修程式嗎? 12/05 00:41
kobe8112: 你想一想,一個byte最多可以表達幾種不同的"值"? 12/05 00:41
kobe8112: 中文字粗估有幾個?1個Byte是否可能表達完呢? 12/05 00:42
badbadook: 那蘋果很好吃 跟 apple 跟12345 字碼大小不是 12/05 00:44
badbadook: 不一樣嗎 12/05 00:44
badbadook: 雖然都是五個字 12/05 00:45
kobe8112: 你前面說英數字和中文都占1byte,所以我才問這問題啊... 12/05 00:47
kobe8112: 然後你指的"字碼"到底是啥意思?有英文專有名詞嗎? 12/05 00:48
badbadook: 歐他們一位都用1byte來存 所以都一樣大 12/05 00:51
kobe8112: 所以針對我前面的問題,你覺得用1個byte能表示所有英數 12/05 00:52
kobe8112: 字以及中文? 12/05 00:52
badbadook: 內碼? 12/05 00:53
badbadook: 如果放了【中】這個中文字,在varchar會占用2個 12/05 00:54
badbadook: 位子,但是nvarchar指占用1個位子。 12/05 00:55
kobe8112: 呃.....我猜你沒看懂他的意思 12/05 01:01
badbadook: 蘋果很好吃 跟 apple 跟12345 字碼大小 一樣 不一樣? 12/05 05:04
kobe8112: 別再鬼打牆了,你所謂的「字碼」到底是指什麼先說清楚 12/05 09:23
kobe8112: 如果你因為不了解,真的想認真討論事情把他搞懂, 12/05 09:29
kobe8112: 就先好好聽人說話呀... 12/05 09:29
badbadook: varchar是用系統預設ANSI的編碼(big5)儲存字元 12/05 15:51
badbadook: 那不就是字碼嗎? 12/05 15:52
kobe8112: 所以你完全沒搞懂啊,ANSI什麼時候有big5了... 12/05 16:25
kobe8112: 你應該先釐清什麼是什麼叫做一個byte,以及文數字/符號 12/05 16:26
kobe8112: 在電腦裡面到底是以什麼樣的資料被儲存起來的 12/05 16:28
badbadook: https://goo.gl/kTMuXu 12/05 16:28
badbadook: 直說答案如何 ? 12/05 16:29
badbadook: 一直繞圈圈很累? 12/05 16:30
kobe8112: 從頭到尾就是你的問題不倫不類,不斷鬼打牆,還說人 12/05 16:34
kobe8112: 繞圈圈勒... 12/05 16:34
kobe8112: https://goo.gl/LPW93v 12/05 16:34
kobe8112: http://goo.gl/cImj5F 12/05 16:34
kobe8112: 你宣告的變數允許你放幾個「字」,跟「儲存一個字需要多 12/05 16:37
kobe8112: 少Byte的空間」是相關但不同的兩個問題 12/05 16:37
kobe8112: 後者完全根據你的變數種類以及文字編碼方式而定 12/05 16:38
kobe8112: 你凌晨貼的那個dotblogs的網址就已經很清楚講了 12/05 16:39
kobe8112: 你就是把他講的「位子」跟「Byte」搞混在一起 12/05 16:39
kobe8112: 才會根本不知道我在說什麼 12/05 16:40
badbadook: UTF-8 : 英文、數字為 1 Byte,其餘的符號(如:中文)為 12/05 16:41
badbadook: 我覺得你根本沒理解我的問題耶? 12/05 16:43
badbadook: 答案就一句話 我不知道 你 說這些幹什麼 12/05 16:44
kobe8112: 因為你自創名詞又問得不清不楚,正常人肯定是不理解的 12/05 16:46
kobe8112: " apple字串 跟 12345字串 放到資料庫裡誰占容量大" 12/05 16:46
kobe8112: 你前面問得這個問題,你自己一直覺得前者會占比較多容量 12/05 16:47
kobe8112: 的 12/05 16:47
kobe8112: 從這邊就可以明顯看到你因為不了解而開始鬼打牆了 12/05 16:48
kobe8112: 當然,這個問題看來你最後是理解了,因為不管在哪種編碼 12/05 16:49
badbadook: 別人都沒這麼多問題耶? 12/05 16:49
kobe8112: 方式下,通通都是一個英數字用1個Byte來儲存 12/05 16:49
badbadook: 我都自己查出來了 12/05 16:51
kobe8112: 說錯,應該說不管何種編碼,一個英數字儲存的容量都一樣 12/05 16:51
kobe8112: 是查出來在哪...所以你現在知道"蘋果很少吃"跟"APPLE" 12/05 16:52
kobe8112: 儲存的時候誰占比較多容量了嗎? 12/05 16:52
badbadook: UTF-8 : 英文、數字為 1 Byte,其餘的符號(如:中文)為 12/05 16:55
badbadook: 2~6 Bytes 12/05 16:56
kobe8112: 你這樣的回答是限定在字串編碼為UTF8的前提了, 12/05 17:03
kobe8112: 並且這樣也不完全是正確解答, 12/05 17:03
kobe8112: 因為你的原始問題其實並沒有交代你存字串的變數 12/05 17:04
kobe8112: 是宣告成哪種形式 12/05 17:04
badbadook: 因為還要看你資料庫欄位選什麼檔案模式 12/05 17:05
badbadook: 對阿 我要是都知道了 我還問這個問題做什麼呢? 12/05 17:06
ctrlbreak: 你還是先搞懂什麼叫字串, 字串只有長短問題, 字串比較 12/05 21:10
ctrlbreak: 時沒有編碼問題, 不管什麼碼比起來都一樣快. 12/05 21:11
ctrlbreak: 搜尋或比較都是memcmp而已, CPU才不管你什麼編碼. 12/05 21:15
badbadook: 多謝c大回答 12/06 00:32
badbadook: memcmp要比對兩字元是否相等不是也要去讀字碼嗎? 12/06 01:38
badbadook: 那英文 中文字碼大小不一樣無關嗎? 12/06 01:39
ctrlbreak: 簡單說是無關滴~ 12/06 01:55
ctrlbreak: 我覺得你每一句都隱含兩個問題耶, 好難回答 XD 12/06 02:01
badbadook: 所以一個100位的中文字串與一個100位的英文字串 12/06 11:51
badbadook: 100位的中文字串在資料都是100位中文字串的資料庫裡 12/06 11:53
badbadook: 100位的英字串在資料都是100位英文串的資料庫裡 12/06 11:53
badbadook: 它們分別被比對出來的時間是一樣的 12/06 11:54
badbadook: 因為我看memcmp程式還是要比對兩個字元的ASCII編碼 12/06 11:57
badbadook: 還是某種編碼來比較 如果編碼位數較多 我想需耗時比 12/06 12:03
badbadook: 較久 12/06 12:04
ctrlbreak: 字串長短影響比較的快慢 12/06 16:50