2011-07-01 70 views
0

問題是DBIinsert在插入到MS SQL服務器時留下長的字符串被截斷。這裏是我的代碼:使用perl DBI插入的文本被截斷

my $insert = $dbh->prepare("INSERT INTO my_table (field_1, field_2) values (?, ?)"); 
$insert->execute($value_1, $value_2); 

其中field_2varchar(100)$value_2數據類型是用空格90個字符,但沒有其他特殊字符的文本字符串。

語句執行後,沒有錯誤提出,我檢查了數據庫,顯然實際插入$value_2是在的性格,這是一個普通的英語單詞的中間被截斷(即不是一個特殊字符)。

我試圖將field_2的數據類型更改爲varchar(150)text。我也用$dbh->quote($value_2)代替$value_2。但他們沒有幫助。

這是怎麼發生的?我該怎麼辦?謝謝!!

+0

您是否確定在連接上設置了RaiseError?這是什麼平臺?你正在使用哪種DBD以及那個驅動程序? – bohica

+0

每次都受到相同的字符串影響,或者無論輸入什麼字符串,都會發生這種情況。 – shaneburgess

+1

輸入數據是什麼字符編碼?數據庫期望它處於什麼字符編碼? –

回答

0

我會說,嘗試各種字符串,看看他們是否都行爲相同的方式。這可能是davorg建議的編碼問題。我記得MySQL中的默認排序規則是瑞典語或Latin1,因此在MySQL中,您可能希望將排序規則更改爲utf8_general_ci。

+0

所有字符串的行爲方式都是一樣的。這確實是由@bohica確定的無聲截斷問題。 – Zhang18