第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

Java/Sql-server 參數(shù)綁定沒有按預(yù)期工作

Java/Sql-server 參數(shù)綁定沒有按預(yù)期工作

慕仙森 2023-02-23 14:37:24
我們注意到我們的應(yīng)用程序中有一個(gè)關(guān)于綁定參數(shù)的奇怪行為。我們使用帶有 JDBC 的 Java 連接到 Sql Server 數(shù)據(jù)庫。在表格單元格中,我們有值“μ”,我們將其與綁定參數(shù)進(jìn)行比較,綁定參數(shù)也設(shè)置為值“μ”?,F(xiàn)在,在像“... where value !=?”這樣的 sql 語句中 , 其中 'value' 是數(shù)據(jù)庫中 'μ' 的值, ? 綁定變量也設(shè)置為“μ”,我們注意到我們得到了一條記錄,盡管我們希望“μ”等于“μ”。我們用來填充綁定參數(shù)的方法是java.sql.PreparedStatement.setString(int, String)。一些事實(shí):μ在不同編碼下的字符值為:ASCII (ISO-8859-1) : 0xB5UTF-8 : 0xC2B5UTF-16 (= Java) : 0x00B5現(xiàn)在我做了一些調(diào)查,看看數(shù)據(jù)庫實(shí)際看到了哪些字節(jié)。因此,我嘗試了這樣的 sql 語句:select convert(VARBINARY(MAX), value), --  selects μ from database table       convert(VARBINARY(MAX), N'μ'),  --  selects μ from literal       convert(VARBINARY(MAX), ?)      --  selects μ from bind parameterfrom ...三個(gè)值的結(jié)果是:B500B500C200B500     <-- Here is the problem!因此,數(shù)據(jù)庫中 μ 的內(nèi)部表示和 NVARCHAR 文字是 B500?,F(xiàn)在我們無法理解這里發(fā)生了什么。我們在 Java 變量中有“μ”的值(內(nèi)部應(yīng)該是 0x00B5)。當(dāng)它作為綁定變量傳遞時(shí),似乎被轉(zhuǎn)換為 UTF-8(這使得字節(jié)序列為 0xC2B5),然后數(shù)據(jù)庫將其視為兩個(gè)字符,從而使字符序列 C200B500。讓事情變得更加混亂:(1) 在具有不同數(shù)據(jù)庫的另一臺(tái)機(jī)器上,相同的代碼按預(yù)期工作。三行的結(jié)果是 B500/B500/B500,因此綁定變量被轉(zhuǎn)換為正確的 B500。(2) 在同一臺(tái)機(jī)器上,相同的數(shù)據(jù)庫但不同的程序(但使用相同的 jdbc 驅(qū)動(dòng)庫和相同的連接參數(shù))這也按預(yù)期工作,給出 B500/B500/B500 的結(jié)果。一些額外的事實(shí),也許它們很重要: 數(shù)據(jù)庫是 Sql Server 2014 Java 是 Java 7 有問題的應(yīng)用程序是在 Tomcat 7 中運(yùn)行的 webapp。Jdbc 庫是 sqljdbc 4.2非常感謝任何解決此問題的幫助!
查看完整描述

1 回答

?
楊魅力

TA貢獻(xiàn)1811條經(jīng)驗(yàn) 獲得超6個(gè)贊

我現(xiàn)在找到了解決方案。它與 Sql Server 或綁定完全沒有關(guān)系,而是......

默認(rèn)情況下,Tomcat 7 不以 UTF-8 模式運(yùn)行(我不知道這一點(diǎn))。我們談?wù)摰?μ 來自另一個(gè)通過網(wǎng)絡(luò)服務(wù)調(diào)用提供此值的應(yīng)用程序。但是,應(yīng)用程序默認(rèn)使用 UTF-8。因此,它發(fā)送了一個(gè) UTF-8 μ,但 Web 服務(wù)并不期望 UTF-8 并認(rèn)為它是兩個(gè)字符,并像這樣處理它們,用 0xC2 和 0xB5 的字符填充內(nèi)部 String 變量(這是,對于 SQL Server,C200B500)。


查看完整回答
反對 回復(fù) 2023-02-23
  • 1 回答
  • 0 關(guān)注
  • 91 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號