全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1497
推到 Plurk!
推到 Facebook!

為何MS SQL資料庫欄位實際資料值的長度多1(其ascii值為0)?

尚未結案
kevin1222
一般會員


發表:1
回覆:0
積分:0
註冊:2005-09-27

發送簡訊給我
#1 引用回覆 回覆 發表時間:2007-09-27 16:29:22 IP:59.120.xxx.xxx 訂閱
請問各位前輩,
敝人使用DELPHI 7 MS SQL,
以DBEXPRESS方式寫入SQL資料庫(利用POST, APPLYUPDATES指令),
但欄位實際長度會多1,
例:欄位為 FD1, 長度為4, 內含值為 '12'
以SQL之LEN(FD1)=3, ASCII(SUBSTRING(FD1,3,1))=0,
但在DELPHI內長度卻只有2,
以致於在比對KEY值時會發生實際有該值但卻找不到的情形,
請問各位前輩指點.

註1:試過用VAR CHAR也一樣
註2:若以SQL指令來做寫入, 則不會用上述問題.
註3:若將欄位寫滿(例:寫入'1234'), 則長度也不會有多1的問題.
canvas
一般會員


發表:6
回覆:21
積分:10
註冊:2004-01-25

發送簡訊給我
#2 引用回覆 回覆 發表時間:2007-09-27 22:19:32 IP:220.132.xxx.xxx 訂閱
不必覺得奇怪, 手冊裡面是這樣寫的:

VARCHAR values are stored using as many characters as are needed, plus one byte to record the
length (two bytes for columns that are declared with a length longer than 255).

在 Overview of String Types 這一個章節裡可以找得到, 我想, 這不知道跟 C 語言中以 #0 作為字串結尾有沒有關係.

用 dbExpress ? 我通常用 ZeosDBO 或是 ODBC, 只用過 dbExpress 一次, 感覺不好用
===================引 用 kevin1222 文 章===================
請問各位前輩,
敝人使用DELPHI 7 MS SQL,
以DBEXPRESS方式寫入SQL資料庫(利用POST, APPLYUPDATES指令),
但欄位實際長度會多1,
例:欄位為 FD1, 長度為4, 內含值為 '12'
以SQL之LEN(FD1)=3, ASCII(SUBSTRING(FD1,3,1))=0,
但在DELPHI內長度卻只有2,
以致於在比對KEY值時會發生實際有該值但卻找不到的情形,
請問各位前輩指點.

註1:試過用VAR CHAR也一樣
註2:若以SQL指令來做寫入, 則不會用上述問題.
註3:若將欄位寫滿(例:寫入'1234'), 則長度也不會有多1的問題.
編輯記錄
canvas 重新編輯於 2007-09-27 22:23:19, 註解 無‧
canvas
一般會員


發表:6
回覆:21
積分:10
註冊:2004-01-25

發送簡訊給我
#3 引用回覆 回覆 發表時間:2007-09-27 22:27:29 IP:220.132.xxx.xxx 訂閱
抱歉, 標題看錯, 我看成是 MySQL, MySQL 的確有這個問題, 但 MS SQL 沒試過, 要錢的用不起.
系統時間:2024-05-17 20:02:23
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!