Varchar සහ nvarchar අතර වෙනස කුමක්ද?


1372

එය nvarcharබහු බයිට් අක්ෂර සඳහා සහය දක්වනවාද? එය එසේ නම්, ගබඩා කිරීම හැර වෙනත් යමක් භාවිතා කිරීම ඇත්ත වශයෙන්ම තිබේද varchars?


6
මම ඉන්කියුඩ්‍රෝගේ කාරණයට කැමතියි, එය මුලින්ම වර්චාර් සහ එන්වාර්චාර් අතර වෙනස ගැන සොයා බැලීමට මා යොමු කළේය. SQL සේවාදායකයට එරෙහි අපගේ ජාවා යෙදුම dB myBatis භාවිතා කරයි, එය පෙරනිමියෙන් nvarchar ලෙස නූල් යවන බව පෙනේ (එය ඉක්මවා යා හැක්කේ කෙසේදැයි (හෝ තිබේදැයි තවමත් විශ්වාස නැත). සරල විමසුමක් විශාල කාර්ය සාධන ගැටලුවක් ලෙස පෙනෙන්නට තිබුනේ එය තෝරාගත් තීරුව එන්වර්චාර් නොව වර්චාර් ලෙස අර්ථ දැක්වූ නිසා වන අතර එය තීරුවේ දර්ශකය නොසලකා හැරීමකි.
ෂෝන්

Answers:


1681

nvarcharතීරු ඕනෑම යුනිකෝඩ් දත්ත ගබඩා කළ හැක. ඒ varcharතීරු 8-bit codepage වර්ණයන්ට සීමා ෙව්. සමහර අය සිතන්නේ varcharඑය අඩු ඉඩ ප්‍රමාණයක් ගන්නා බැවින් එය භාවිතා කළ යුතු බවයි. මෙය නිවැරදි පිළිතුර නොවන බව මම විශ්වාස කරමි. කේත පිටුවේ නොගැලපීම් වේදනාවක් වන අතර කේත කේත ගැටළු සඳහා ප්‍රතිකාරය යුනිකෝඩ් වේ. වර්තමානයේ ලාභ තැටිය සහ මතකය ඇති බැවින්, කේත පිටු සමඟ කාලය නාස්ති කිරීමට කිසිදු හේතුවක් නැත.

සියලුම නවීන මෙහෙයුම් පද්ධති සහ සංවර්ධන වේදිකා අභ්‍යන්තරව යුනිකෝඩ් භාවිතා කරයි. ඒ nvarcharවෙනුවට භාවිතා කිරීමෙන් varchar, ඔබ කියවන විට හෝ දත්ත ගබඩාවට ලියන සෑම අවස්ථාවකම කේතීකරණ පරිවර්තනය කිරීමෙන් වළක්වා ගත හැකිය. පරිවර්තනයන්ට කාලය ගත වන අතර දෝෂ වලට ගොදුරු වේ. පරිවර්තන දෝෂ වලින් සුවය ලැබීම සුළුපටු නොවන ගැටළුවකි.

ඔබ ASCII පමණක් භාවිතා කරන යෙදුමක් සමඟ අන්තර් සම්බන්ධ වන්නේ නම්, දත්ත සමුදායේ යුනිකෝඩ් භාවිතා කිරීම මම තවමත් නිර්දේශ කරමි. මෙහෙයුම් පද්ධතිය සහ දත්ත සමුදාය එකතු කිරීමේ ඇල්ගොරිතම යුනිකෝඩ් සමඟ වඩා හොඳින් ක්‍රියා කරයි. යුනිකෝඩ් වෙනත් පද්ධති සමඟ අන්තර් ක්‍රියා කිරීමේදී පරිවර්තන ගැටළු මඟහරවා ගනී . ඔබ අනාගතය සඳහා සූදානම් වනු ඇත. පූර්ණ යුනිකෝඩ් ආචයනයේ සමහර ප්‍රතිලාභ භුක්ති විඳින අතරම, ඔබ නඩත්තු කළ යුතු ඕනෑම උරුම පද්ධතියක් සඳහා ඔබේ දත්ත 7-බිට් ASCII ට සීමා කර ඇති බව ඔබට සැමවිටම වලංගු කළ හැකිය.


8
මෙය ඉතා හොඳ තොරතුරු වේ. එබැවින් තේරීම අවසානයේ එකක් බවට පත්වේ යැයි මම අනුමාන කළහොත් මෙය නිවැරදිව වටහා ගන්නේද - කුමන සම්පත ලාභදායීද: ප්‍රොසෙසරය + සංවර්ධන පොදු කාර්ය හෝ ගබඩා?
මැට් කැෂාට්

141
Att මැතිව් පැට්‍රික් කැෂාට් - ඔබට එය ඒ ආකාරයෙන් දැක ගත හැකිය. නමුත් සියලු පෙළ දත්ත යුනිකෝඩ් හි ඇති තේජාන්විත ලෝකයක් ගැන ඔබ සිතන්නේ නම් , සහ සංවර්ධකයින් කිසි විටෙකත් යමක් කේතනය කරන්නේ කුමක් දැයි සිතා බැලිය යුතු නැති අතර සමස්ත දෝෂයන් කිසි විටෙකත් සිදු නොවන්නේ නම්, එවිට ඔබට දැක ගත හැකිය ඇත්තෙන්ම විකල්පයක් නැත.
ජෙෆ්රි එල් වයිට්ලෙජ්


8
Ar මාටින් ස්මිත් - එවැනි අවස්ථාවන්හිදී, වර්චාර් විසින් ලබා දෙන කුඩා වාසිය (සංයුක්ත ගබඩා කිරීම) අතුරුදහන් වේ. මම හිතන්නේ වර්චර් මම හිතුවට වඩා නරකයි!
ජෙෆ්රි එල් වයිට්ලෙජ්

9
EtPeterAllenWebb - ඔබට ඕනෑම යුනිකෝඩ් දත්ත “ගබඩා” කළ හැකිය, මන්ද යූටීඑෆ් -16 හි ආදේශක යුගල යූසීඑස් -2 හි අක්ෂර මෙන් ගබඩා කළ හැකි බැවිනි. දත්ත ගබඩා කිරීම සහ ලබා ගැනීම සඳහා එය විනිවිද පෙනෙන ලෙස ක්‍රියා කරනු ඇත. දැන් ඔබට කළ නොහැකි දෙය නම් BMP වලින් පිටත විශ්වාසදායක සිද්ධි පරිවර්තනයන් හා සැසඳීම් ලබා ගැනීමයි, නමුත් මම ඒ ගැන කිසිදු ප්‍රකාශයක් නොකළෙමි. එබැවින් ඔබට සැකසීමට අවශ්‍ය ඩෙසරෙට් පෙළ විශාල ප්‍රමාණයක් තිබේ නම්, එය දත්ත සමුදායෙන් පිටත සිදු කිරීම වඩාත් සුදුසුය. නමුත් එය එහි ගබඩා කිරීම සඳහා හොඳයි. (ඇත්ත වශයෙන්ම, වර්චාර් ඔබට එහි උදව් නොකරනු ඇත!)
ජෙෆ්රි එල් වයිට්ලෙජ්

263

varchar : විචල්ය-දිග, යුනිකෝඩ් නොවන අක්ෂර දත්ත. දත්ත ගබඩාව මගින් දත්ත ගබඩා කරන්නේ කුමන කේත පිටුවද යන්න තීරණය කරයි.

nvarchar : විචල්ය-දිග යුනිකෝඩ් අක්ෂර දත්ත. සැසඳීම් සඳහා දත්ත සමුදා එකතුව මත රඳා පවතී.

මෙම දැනුමෙන් සන්නද්ධව, ඔබේ ආදාන දත්ත සමඟ ගැලපෙන ඕනෑම එකක් භාවිතා කරන්න (ASCII v. යුනිකෝඩ්).


5
වර්චාර්ට යුනිකෝඩ් දත්ත ගබඩා කළ නොහැකි වැනි සීමාවක් තිබේද? එහි 1 සහ 0 ගේ. චීන අන්තර්ගතය වර්චර් ලෙස මගේ ඩී.බී.ට සුරැකීමට මට හැකියාව තිබේ. මම එහි යූටීඑෆ් -8 නියම කරමි. එසේ නම් එය ක්‍රියාත්මක වන්නේ කෙසේද?
නිශාන්ත්

3
Ish නිශාන්ත ප්‍රමාද පිළිතුර : ඇත්ත වශයෙන්ම ඔබට යූටීඑෆ් -8 වර්චාර් තුළ ගබඩා කළ හැකි නමුත් එය SQL සේවාදායකයේ සංගීත කාර්යයන් බිඳ දමනු ඇත. ඔබගේ යෙදුම තුළ ඔබ සියලු සෙවීම් / පරිවර්තනයන් සිදු කරන්නේ නම් ඔව්, ඔබට එය කළ හැකිය (නමුත් එහි ප්‍රයෝජනය කුමක්ද?). යූඑස්එස් -2 (ඔව්, එස්එස් 2 කේ 16 ට පෙර යූටීඑෆ් -16 නොවේ) සහ එස්එස් සහාය දක්වන යුනිකෝඩ් කේතන ක්‍රමය පමණක් වන අතර එහි නූල් ක්‍රියාකාරිත්වය ක්‍රියාත්මක වන්නේ එම කේතන ක්‍රමය සමඟ පමණි. BTW දර්ශක ගැන කුමක් කිව හැකිද? ඔබට අත්තනෝමතික දත්ත ගබඩා කිරීමට අවශ්‍ය නම් ඒ වෙනුවට ද්විමය භාවිතා කිරීම හොඳය.
ඇඩ්‍රියානෝ රෙපෙට්ටි

ඔව්, එය නූල් සෙවුම් කාර්යයන් බිඳ දමයි.
නිශාන්ත්

9
ඉතින්, ඔබ දන්නවා ... එය "වැඩ කරන්නේ නැහැ". ඒක ගබඩා වගේ floatතුලට intහා යනවා "හොඳින් වග බලා ගන්න දශම අතුරුදහන් යන්න." එපා.
user7116

70

මම සෑම විටම nvarchar භාවිතා කරමි, එය මා ගොඩනඟන ඕනෑම දෙයකට මා විසි කරන ඕනෑම දත්තයකට ඔරොත්තු දීමට ඉඩ සලසයි. මගේ CMS පද්ධතිය චීන භාෂාව අහම්බෙන් කරයි, මන්ද මම nvarchar භාවිතා කළෙමි. මේ දිනවල, ඕනෑම නව යෙදුම් සඳහා අවශ්‍ය ඉඩ ප්‍රමාණය ගැන සැබවින්ම සැලකිලිමත් නොවිය යුතුය.


25
නව යෙදුම් අවකාශ සීමා කිරීම් ගැන සැලකිලිමත් නොවිය යුතුය යන අදහස තරමක් දුරදක්නා වන අතර, මධ්‍යම සිට විශාල ව්‍යවසාය මට්ටමින් දත්ත සමුදායන් සමඟ කටයුතු කළ ඕනෑම අයෙකු ඔබට පැවසීමට සතුටු වනු ඇත, සම්පූර්ණයෙන්ම වැරදිය.
Frater

61
ටැග්ස් 2 කේගේ මුඛය තුළ වචන තැබීමේ නිදහස ලබා ගැනීම සඳහා, වඩාත් නිවැරදි ප්‍රකාශයක් විය හැක්කේ 'ජාත්‍යන්තරකරණය සහ වෙනත් චරිත කට්ටල ගැටළු වලට වඩා ඕනෑම නව යෙදුම් අවශ්‍ය අවකාශය ගැන වැඩි සැලකිල්ලක් දැක්විය යුතු යැයි සිතිය නොහැකිය' යන්නයි.
කෝවන්

1
"මේ දිනවල ඕනෑම නව යෙදුම් අවශ්‍ය අවකාශය ගැන සැබවින්ම සැලකිලිමත් නොවිය යුතුය." - ඔබ නොමිලේ වලාකුළු ආචයනය භාවිතා නොකරන්නේ නම්, ගෙවන ලද සැලැස්ම $ හි සැළකිය හැකි පැනීමකි (AppHarbor SQL Server හවුල් සැලසුම් බලන්න).
ganders

3
and ගාන්ඩර්ස් හ l! ඔයා එතනමයි. සාමාන්‍යකරණය කළ ප්‍රකාශයන් තාවකාලිකව නිවැරදි වේ. පරිගණනය අනිවාර්යයෙන්ම පැද්දීම සහ වටරවුමකි. වින්ඩෝස් අසුර් සීසීපී හි මම කොපමණ ඉඩ ප්‍රමාණයක් භාවිතා කරනවාද යන්න ගැන මම අනිවාර්යයෙන්ම සැලකිලිමත් වෙමි. එයින් කියැවුණේ මම කවදාවත් nvarchar වලට වඩා varchar භාවිතා නොකරන බවයි. අනේ මම පරස්පර විරෝධිද?
rism

1
@rism, "never"අවම වශයෙන් තාක්‍ෂණිකව ඔබ උපුටා දැක්වීම් භාවිතා කිරීම සමඟ පරස්පර විරෝධී අවදානමක් ඉවත් කළ බව මම විශ්වාස කරමි .
ස්මන්ඩෝලි

30

එය ඔරකල් ස්ථාපනය කළ ආකාරය මත රඳා පවතී. ස්ථාපන ක්‍රියාවලියේදී, NLS_CHARACTERSET විකල්පය සකසා ඇත. විමසුම සමඟ ඔබට එය සොයාගත හැකිය SELECT value$ FROM sys.props$ WHERE name = 'NLS_CHARACTERSET'.

ඔබගේ NLS_CHARACTERSET යනු UTF8 වැනි යුනිකෝඩ් කේතීකරණයක් නම් නියමයි. VARCHAR සහ NVARCHAR භාවිතා කිරීම බොහෝ දුරට සමාන ය. දැන් කියවීම නවත්වන්න, ඒ සඳහා යන්න. එසේ නොමැතිනම්, හෝ ඔබට ඔරකල් අක්ෂර කට්ටලය පාලනය කළ නොහැකි නම්, කියවන්න.

VARCHAR - දත්ත NLS_CHARACTERSET කේතීකරණයේ ගබඩා කර ඇත. එකම සේවාදායකයේ වෙනත් දත්ත සමුදායන් තිබේ නම්, ඔබට ඒවා සීමා කළ හැකිය; සහ අනෙක් අතට, ඔබට සැකසුම බෙදා ගත යුතු බැවින්. එවැනි ක්ෂේත්‍රයකට එම අක්ෂර කට්ටලය භාවිතයෙන් කේතනය කළ හැකි ඕනෑම දත්ත ගබඩා කළ හැකි අතර වෙන කිසිවක් නැත . උදාහරණයක් ලෙස අක්ෂර කට්ටලය MS-1252 නම්, ඔබට ගබඩා කළ හැක්කේ ඉංග්‍රීසි අකුරු, උච්චාරණය කළ අක්ෂර අතලොස්සක් සහ තවත් කිහිපයක් (€ සහ - වැනි) පමණි. ඔබගේ යෙදුම ලෝකයේ වෙනත් තැනක ක්‍රියාත්මක වීමට නොහැකි ස්ථාන කිහිපයකට පමණක් ප්‍රයෝජනවත් වේ. මෙම හේතුව නිසා එය නරක අදහසක් ලෙස සැලකේ.

NVARCHAR - දත්ත යුනිකෝඩ් කේතීකරණයේ ගබඩා කර ඇත. සෑම භාෂාවක්ම සහාය දක්වයි. හොඳ අදහසක්.

ගබඩා ඉඩ ගැන කුමක් කිව හැකිද? VARCHAR සාමාන්‍යයෙන් කාර්යක්ෂම වේ, අක්‍ෂර කට්ටලය / කේතන ක්‍රමය විශේෂිත ස්ථානයක් සඳහා අභිරුචිකරණය කර ඇත. NVARCHAR ක්ෂේත්‍ර යූටීඑෆ් -8 හෝ යූටීඑෆ් -16 කේතන ක්‍රමයේ ගබඩා කර ඇති අතර එන්එල්එස් සැකසුම මත පදනම්ව උත්ප‍්‍රාසාත්මක ලෙස ප‍්‍රමාණවත්ය. යූටීඑෆ් -8 "බටහිර" භාෂාවන් සඳහා ඉතා කාර්යක්ෂම වන අතර තවමත් ආසියානු භාෂාවන්ට සහය දක්වයි. UTF-16 ආසියානු භාෂා සඳහා ඉතා කාර්යක්ෂම වන අතර තවමත් "බටහිර" භාෂාවන්ට සහය දක්වයි. ගබඩා අවකාශය ගැන සැලකිලිමත් වන්නේ නම්, ඔරකල් යූටීඑෆ් -8 හෝ යූටීඑෆ් -16 සුදුසු පරිදි භාවිතා කිරීමට එන්එල්එස් සැකසුමක් තෝරන්න.

සැකසුම් වේගය ගැන කුමක් කිව හැකිද? බොහෝ නව කේතීකරණ වේදිකා යුනිකෝඩ් ස්වදේශීයව භාවිතා කරයි (ජාවා, .නෙට්, මීට වසර ගණනාවකට පෙර සිට C ++ std :: wstring!) එබැවින් දත්ත සමුදා ක්ෂේත්‍රය VARCHAR නම් එය සෑම කියවීමක හෝ ලිවීමකදීම අක්ෂර කට්ටල අතර පරිවර්තනය කිරීමට ඔරකල්ට බල කරයි, එතරම් හොඳ නැත. NVARCHAR භාවිතා කිරීම පරිවර්තනය වළක්වයි.

නිගමනය: NVARCHAR භාවිතා කරන්න! එය සීමාවන් සහ පරායත්තතාවයන් මගහරියි, ගබඩා ඉඩ සඳහා කදිම වන අතර සාමාන්‍යයෙන් කාර්ය සාධනය සඳහාද හොඳම වේ.


42
ප්‍රශ්නය SQL සේවාදායකය ගැන හැර, මෙය ඇත්තෙන්ම හොඳ පිළිතුරකි.
උත්තේජනය කරයි

21

nvarchar දත්ත යුනිකෝඩ් ලෙස ගබඩා කරයි, එබැවින් ඔබ බහුභාෂා දත්ත (එක් භාෂාවකට වඩා) දත්ත තීරුවක ගබඩා කිරීමට යන්නේ නම් ඔබට N ප්‍රභේදය අවශ්‍ය වේ.


16

මගේ ශත දෙක

  1. නිවැරදි දත්ත වර්ග භාවිතා නොකරන විට දර්ශක අසමත් විය හැකිය:
    SQL සේවාදායකයේ: ඔබට VARCHAR තීරුවකට ඉහළින් දර්ශකයක් ඇති අතර එය යුනිකෝඩ් නූලක් ඉදිරිපත් කළ විට, SQL සේවාදායකය දර්ශකය භාවිතා නොකරයි. ස්මාල්ඉන්ට් අඩංගු සුචිගත කළ තීරුවකට ඔබ බිග්ඉන්ට් එකක් ඉදිරිපත් කරන විටත් එයම වේ. බිග්ඉන්ට් කුඩා එකක් වීමට තරම් කුඩා වුවද, SQL සේවාදායකයට දර්ශකය භාවිතා කළ නොහැක. ඔබ වටා ඇති අනෙක් මාර්ගයට මෙම ගැටළුව නොමැත (සුචිගත කළ බිග්ඉන්ට් ඔට් එන්වාර්චාර් තීරුවට ස්මාල්ඉන්ට් හෝ ඇන්සි-කෝඩ් ලබා දීමේදී).


  2. දත්ත සමුදායන් විවිධ ඩීබීඑම්එස් (දත්ත පදනම් කළමනාකරණ පද්ධතිය) අතර වෙනස් විය හැකිය: සෑම දත්ත ගබඩාවක ම තරමක් වෙනස් දත්ත සමුදායන් ඇති බවත් VARCHAR සෑම තැනකම එක හා සමාන නොවන බවත් දැන ගන්න. SQL සේවාදායකයට VARCHAR සහ NVARCHAR ඇති අතර, Apache / Derby දත්ත ගබඩාවක ඇත්තේ VARCHAR පමණක් වන අතර VARCHAR යුනිකෝඩ් හි ඇත.


නමුත් නියත වශයෙන්ම ඔබ ඔබේ කේතය නිසියාකාරව ලියන්නේ නම් (එනම් පරාමිතිගත විමසුම් ආදිය භාවිතා කිරීම) එවිට ලක්ෂ්‍ය 1 අවදානම අඩුය.
පෝල්

15

ප්‍රධාන වශයෙන් nvarchar යුනිකෝඩ් අක්ෂර ගබඩා කරන අතර වර්චාර් යුනිකෝඩ් නොවන අක්ෂර ගබඩා කරයි.

“යුනිකෝඩ්ස්” යන්නෙන් අදහස් කරන්නේ අරාබි, හෙබ්‍රෙව්, චීන, ජපන් වැනි වෙනත් භාෂා ගණනාවක අක්ෂර තනි අක්ෂර කට්ටලයක කේතනය කිරීමට ඉඩ සලසන බිට් 16 අක්ෂර කේතීකරණ යෝජනා ක්‍රමයයි.

ඒ කියන්නේ යුනිකෝඩ් ගබඩා කිරීම සඳහා අක්ෂරයකට බයිට් 2 ක් භාවිතා කරන අතර ගබඩා කිරීමට එක් අක්ෂරයකට එක් බයිට් එකක් පමණක් භාවිතා කරයි. ඒ කියන්නේ යුනිකෝඩ් නොවන යුනිකෝඩ් සමඟ සසඳන විට ගබඩා කිරීමට ද්විත්ව ධාරිතාවක් අවශ්‍යයි.


10

ඔයා හරි. තනි බයිට් අක්ෂර දත්ත ගබඩා කරන nvarcharඅතර යුනිකෝඩ් දත්ත varcharගබඩා කරයි. ඔබ දැනටමත් සඳහන් කර ඇති ගබඩා වෙනස්කම් හැරුණු විට ( nvarcharගබඩා ඉඩ මෙන් දෙගුණයක් අවශ්‍ය වේ varchar), ඊට වඩා nvarcharවැඩි කැමැත්තක් දැක්වීමට ප්‍රධාන හේතුව varcharජාත්‍යන්තරකරණයයි (එනම් වෙනත් භාෂාවලින් නූල් ගබඩා කිරීම).


10

මම කියන්නේ, එය රඳා පවතී.

ඔබ ඩෙස්ක්ටොප් යෙදුමක් සංවර්ධනය කරන්නේ නම්, මෙහෙයුම් පද්ධතිය යුනිකෝඩ් හි ක්‍රියා කරයි (වර්තමාන සියලුම වින්ඩෝස් පද්ධති මෙන්) සහ භාෂාව ස්වදේශීයව යුනිකෝඩ් සඳහා සහය දක්වයි (පෙරනිමි නූල් යුනිකෝඩ් වේ, ජාවා හෝ සී # වැනි), ඉන්පසු nvarchar වෙත යන්න.

ඔබ යූටීඑෆ් -8 ලෙස නූල් එන වෙබ් යෙදුමක් සංවර්ධනය කරන්නේ නම් සහ භාෂාව PHP වන අතර එය තවමත් යුනිකෝඩ් සඳහා ස්වදේශීයව සහය නොදක්වයි (5.x අනුවාද වල), එවිට වර්චාර් වඩා හොඳ තේරීමක් වනු ඇත.


9

NVARCHARයුනිකෝඩ් ගබඩා කළද , VARCHARඔබේ දේශීය භාෂාවල දත්ත භාවිතා කර සුරැකිය හැකි බව සංයෝජනයේ ආධාරයෙන් සලකා බැලිය යුතුය .

පහත දැක්වෙන තත්වය සිතා බලන්න.

ඔබේ ඩීබී හි එකතුව පර්සියානු වන අතර ඔබ 'علی' (අලිගේ පර්සියානු ලිවීම) වැනි අගයක් ඉතිරි කරයි. VARCHAR(10) . කිසිදු ගැටළුවක් නොමැති අතර DBMS එය ගබඩා කිරීම සඳහා භාවිතා කරන්නේ බයිට් තුනක් පමණි.

කෙසේ වෙතත්, ඔබට ඔබේ දත්ත වෙනත් දත්ත ගබඩාවකට මාරු කර නිවැරදි ප්‍රති result ලය දැකීමට අවශ්‍ය නම්, මෙම උදාහරණයේ පර්සියානු ඉලක්කය වන ගමනාන්ත දත්ත ගබඩාවට සමාන එකතුවක් තිබිය යුතුය.

ඔබේ ඉලක්ක එකතුව වෙනස් නම්, ඉලක්ක දත්ත ගබඩාවේ ප්‍රශ්න ලකුණු (?) ඔබට පෙනේ.

අවසාන වශයෙන්, ඔබ ඔබේ දේශීය භාෂාව භාවිතා කිරීම සඳහා විශාල දත්ත ගබඩාවක් භාවිතා කරන්නේ නම්, වැඩි ඉඩ ප්‍රමාණයක් භාවිතා කිරීම වෙනුවට ස්ථානය භාවිතා කිරීමට මම නිර්දේශ කරමි.

නිර්මාණය වෙනස් විය හැකි බව මම විශ්වාස කරමි. එය ඔබ වැඩ කරන පරිසරය මත රඳා පවතී.


8

මම පිළිතුරු දෙන ලද්දේ බොහෝ භාවිතා කිරීමට නිර්දේශ කිරීමට පෙනේ nvarcharපුරා varcharඅවකාශය තවදුරටත් ප්රශ්නයක් නොවෙයි, ඒ නිසා ටිකක් වැඩිපුර ගබඩා කිරීම සඳහා යුනිකෝඩ් හැකියාව කිසිදු හානියක් නැති නිසා,. හොඳයි, ඔබේ තීරුවට ඉහළින් දර්ශකයක් යෙදීමට අවශ්‍ය විට මෙය සැමවිටම සත්‍ය නොවේ. ඔබට සුචිගත කළ හැකි ක්ෂේත්‍රයේ ප්‍රමාණය මත SQL සේවාදායකයට බයිට් 900 ක සීමාවක් ඇත. එබැවින් ඔබට එය තිබේ නම් varchar(900)ඔබට එය සුචිගත කළ හැකිය, නමුත් එසේ නොවේ varchar(901). සමඟ nvarchar, අක්ෂර ගණන අඩකින් අඩුවී ඇති බැවින් ඔබට සුචිගත කළ හැකිය nvarchar(450). එබැවින් ඔබට අවශ්‍ය නොවන බව ඔබට විශ්වාස නම් nvarchar, මම එය භාවිතා කිරීම නිර්දේශ නොකරමි.

පොදුවේ ගත් කල, දත්ත සමුදායන් තුළ, ඔබට අවශ්‍ය ප්‍රමාණයට ඇලී සිටීමට මම නිර්දේශ කරමි, මන්ද ඔබට සැමවිටම පුළුල් කළ හැකිය. නිදසුනක් වශයෙන්, වැඩ කරන සගයකු වරක් සිතුවේ nvarchar(max)තීරුවක් සඳහා කිසිදු හානියක් සිදු නොවන බවයි , මන්දයත් අපට ගබඩා කිරීම පිළිබඳ කිසිදු ගැටළුවක් නොමැති බැවිනි. පසුව, අපි මෙම තීරුව හරහා දර්ශකයක් යෙදීමට උත්සාහ කළ විට, SQL සේවාදායකය මෙය ප්‍රතික්ෂේප කළේය. කෙසේ වෙතත්, ඔහු ඉරට්ටේ සිට ආරම්භ කළේ නම්, varchar(5)එවැනි ගැටළුවක් නොමැතිව අපට එය පසුව අපට අවශ්‍ය දේ දක්වා පුළුල් කළ හැකිව තිබූ අතර එමඟින් මෙම ගැටළුව විසඳීම සඳහා ක්ෂේත්‍ර සංක්‍රමණ සැලැස්මක් කිරීමට අපට අවශ්‍ය වනු ඇත.


7

යුනිකෝඩ් අක්ෂර ගබඩා කිරීමට වර්චාර් ඔබට උදව් කරයි. ඔබට දේශීය දත්ත ගබඩා කිරීමට අවශ්‍ය නම් එය යා යුතු මාර්ගයයි.


7

අක්ෂරයක් ගබඩා කිරීම සඳහා තනි බයිට් එකක් භාවිතා කරන්නේ නම්, හැකි සංයෝජන 256 ක් ඇති අතර එමඟින් ඔබට විවිධ අක්ෂර 256 ක් ඉතිරි කළ හැකිය. සංයෝජනය යනු අක්ෂර හා ඒවා සංසන්දනය කර වර්ග කර ඇති නීති නිර්වචනය කරන රටාවයි.

1252, එය ලතින් 1 (ANSI) වන අතර එය වඩාත් සුලභ වේ. බොහෝ භාෂාවන් භාවිතා කරන සියලුම අක්ෂර ගබඩා කිරීමට තනි-බයිට් අක්ෂර කට්ටල ප්‍රමාණවත් නොවේ. උදාහරණයක් ලෙස, සමහර ආසියානු භාෂාවන්ට අක්ෂර දහස් ගණනක් ඇත, එබැවින් ඔවුන් අක්ෂරයකට බයිට් දෙකක් භාවිතා කළ යුතුය.

යුනිකෝඩ් ප්‍රමිතිය

ජාලයක බහු කේත පිටු භාවිතා කරන පද්ධති භාවිතා කරන විට, සන්නිවේදනය කළමනාකරණය කිරීම දුෂ්කර වේ. දේවල් ප්රමිතිකරණය, ISO සහ යුනිකෝඩ් මූල්යායතන සමූහයේ හඳුන්වා දුන් යුනිකෝඩ් . එක් එක් අක්ෂර ගබඩා කිරීම සඳහා යුනිකෝඩ් බයිට් දෙකක් භාවිතා කරයි. එනම් විවිධ අක්ෂර 65,536 ක් අර්ථ දැක්විය හැකි බැවින් සියලුම අක්ෂර පාහේ යුනිකෝඩ් වලින් ආවරණය කළ හැකිය. පරිගණක දෙකක් යුනිකෝඩ් භාවිතා කරන්නේ නම්, සෑම සංකේතයක්ම එකම ආකාරයකින් නිරූපණය වන අතර පරිවර්තනයක් අවශ්‍ය නොවේ - යුනිකෝඩ් පිටුපස ඇති අදහස මෙයයි.

SQL සේවාදායකයට අක්ෂර දත්ත වර්ග දෙකක් ඇත:

  • යුනිකෝඩ් නොවන (වරහන්, වර්චාර් සහ පෙළ)
  • යුනිකෝඩ් (nchar, nvarchar, සහ ntext)

අපට විවිධ රටවල් වලින් චරිත දත්ත සුරැකීමට අවශ්‍ය නම්, සෑම විටම යුනිකෝඩ් භාවිතා කරන්න.


6

මට මෙහි කියන්නට ඇත්තේ (මම බොහෝ විට මා ස්ලයිට් එකකට විවෘත වනු ඇති බව මට වැටහී ඇති බවය!), නමුත් නියත වශයෙන්ම NVARCHARසැබවින්ම වඩා ප්‍රයෝජනවත් වන එකම අවස්ථාව (එහි වැඩි ගණනක් සැලකිල්ලට ගන්න !) VARCHARසියල්ලටම වඩා සියලු සංයෝජන වලට වඩා යැපෙන පද්ධති සහ දත්ත සමුදාය තුළම එක හා සමානද ...? එසේ නොවේ නම්, සංයුක්ත පරිවර්තනය කෙසේ හෝ සිදුවිය යුතු අතර එය VARCHARහැකි තරම් ශක්‍ය වේ NVARCHAR.

මෙයට එකතු කිරීම සඳහා, SQL සේවාදායකය (2012 ට පෙර) වැනි සමහර දත්ත සමුදා පද්ධතිවල පිටු ප්‍රමාණය දළ වශයෙන් ඇත. 8 කේ. එබැවින්, ඔබ සෙවිය හැකි දත්ත a TEXTහෝ NTEXTක්ෂේත්‍රයක් වැනි දෙයක් තුළ ගබඩා කර බැලීමට බලා සිටින්නේ නම් VARCHARසම්පූර්ණ 8k වටිනාකමින් යුත් ඉඩ ප්‍රමාණයක් NVARCHARසපයන අතර 4k පමණක් ලබා දෙයි (බයිට් දෙගුණයක්, අවකාශය දෙගුණයක්).

සාරාංශගත කිරීම සඳහා, එක්කෝ භාවිතය රඳා පවතින්නේ:

  • ව්යාපෘතිය හෝ සන්දර්භය
  • යටිතල
  • දත්ත සමුදා පද්ධතිය

6

SQL සේවාදායක VARCHAR සහ NVARCHAR දත්ත වර්ගය අතර වෙනස අනුගමනය කරන්න . මෙහිදී ඔබට ඉතා විස්තරාත්මක ආකාරයකින් දැකිය හැකිය.

පොදුවේ ගත් කල, දත්ත යුනිකෝඩ් ලෙස ගබඩා කරයි, එබැවින්, ඔබ බහු භාෂා දත්ත (එක් භාෂාවකට වඩා) දත්ත තීරුවක ගබඩා කිරීමට යන්නේ නම් ඔබට N ප්‍රභේදය අවශ්‍ය වේ.


මෙය ඉතා ප්‍රයෝජනවත් සබැඳියකි, නමුත් ඔබේ පිළිතුර ඊට වඩා වැඩි නොවේ: සබැඳියක්.
රබර් ඩක්

ckuhn203, මෙය බැලීමට මම ඔබට කියන්න යන්නේ නැහැ
ප්‍රදීප් කේෂර්වානි

6

Varchar(n)සහ අතර ඇති ප්‍රධාන වෙනස nvarchar(n): රූප විස්තරය මෙහි ඇතුළත් කරන්න

Varchar(විචල්‍ය-දිග, යුනිකෝඩ් නොවන අක්‍ෂර දත්ත) ප්‍රමාණය 8000 දක්වා වේ. 1.එය විචල්‍ය දිග දත්ත වර්ගයකි

  1. යුනිකෝඩ් නොවන අක්ෂර ගබඩා කිරීමට භාවිතා කරයි

  2. එක් එක් අක්ෂර සඳහා බයිට් 1 ක ඉඩ ප්‍රමාණයක් හිමි වේ

රූප විස්තරය මෙහි ඇතුළත් කරන්න

Nvarchar: විචල්ය-දිග යුනිකෝඩ් අක්ෂර දත්ත.

1.එය විචල්‍ය දිග දත්ත වර්ගයකි

2. යුනිකෝඩ් අක්ෂර ගබඩා කිරීමට භාවිතා කරයි.

  1. දත්ත යුනිකෝඩ් කේතීකරණයේ ගබඩා කර ඇත. සෑම භාෂාවක්ම සහාය දක්වයි. (උදාහරණයක් ලෙස අරාබි, ජර්මානු, හින්දි, සහ වෙනත් භාෂා)

6

ඩොලර් 47000 ක කීර්තියක් සහිත ජෙෆ්රි එල් වයිට්ලෙජ් විසින් nvarchar භාවිතය නිර්දේශ කරයි

ඩොලර් 33200 ක කීර්තියක් සහිත සොලමන් රුට්ස්කි නිර්දේශ කරන්නේ: සෑම විටම NVARCHAR භාවිතා නොකරන්න. එය ඉතා භයානක හා බොහෝ විට මිල අධික ආකල්පයක් / ප්‍රවේශයකි.

Varchar සහ nvarchar SQL Server දත්ත වර්ග අතර ප්‍රධාන කාර්ය සාධන වෙනස්කම් මොනවාද?

https://www.sqlservercentral.com/articles/disk-is-cheap-orly-4

එතරම් ඉහළ කීර්තියක් ඇති පුද්ගලයන් දෙදෙනාම ඉගෙනුම් වර්ග සේවාදායක දත්ත සමුදා සංවර්ධකයෙකු තෝරා ගන්නේ කුමක්ද?

ඔබ තේරීම් වලට අනුකූල නොවන්නේ නම් කාර්ය සාධන ගැටළු පිළිබඳ පිළිතුරු සහ අදහස් දැක්වීම්වල බොහෝ අනතුරු ඇඟවීම් තිබේ.

කාර්ය සාධනය සඳහා අදහස් / ගැති nvarchar ඇත.

කාර්ය සාධනය සඳහා අදහස් දැක්වීම් ගැති / කොන් වර්චර් ඇත.

තීරු සිය ගණනක් සහිත වගුවක් සඳහා මට විශේෂ අවශ්‍යතාවයක් ඇත, එය අසාමාන්‍ය දෙයක් විය හැකිද?

SQL * සේවාදායක 2012 හි 8060 බයිට් වගු වාර්තා ප්‍රමාණයේ සීමාවට ළඟාවීම වළක්වා ගැනීම සඳහා මම වර්චර් තෝරා ගනිමි.

Nvarchar භාවිතය, මට නම්, මෙම බයිට් 8060 සීමාව ඉක්මවා යයි.

අදාළ කේන්ද්‍ර වගු වල දත්ත වර්ග ප්‍රාථමික මධ්‍යම වගුවේ දත්ත වර්ග සමඟ සැසඳිය යුතු යැයි මම සිතමි.

මීට පෙර පළපුරුදු දත්ත සමුදා සංවර්ධකයින් විසින් දකුණු ඕස්ට්‍රේලියානු රජය විසින් මෙම සේවා ස්ථානයේ වර්චාර් තීරුව භාවිතා කර ඇති බව මම දැක ඇත්තෙමි, එහිදී වගු පේළි ගණන මිලියන හෝ ඊට වැඩි වනු ඇත (සහ ඉතා විශාල වශයෙන් nvarchar තීරු කිහිපයක් තිබේ නම්) වගු), එබැවින් සමහර විට අපේක්ෂිත දත්ත පේළි පරිමාවන් මෙම තීරණයෙහි කොටසක් බවට පත්වේ.


1

nvarcharvarcharඅපගේ කේත දෝෂය නිදහස් කිරීම සඳහා සාපේක්ෂව නොගැලපීම භාවිතා කිරීම ආරක්ෂිත වේ (නොගැලපීම ටයිප් කරන්න) nvarcharයුනිකෝඩ් අක්ෂරවලට ද ඉඩ සලසයි. අපි whereSQL සේවාදායක විමසුමේදී කොන්දේසිය භාවිතා කරන විට සහ අප =ක්‍රියාකරු භාවිතා කරන්නේ නම් , එය සමහර විට දෝෂයක් ඇති කරයි. මෙයට බොහෝ දුරට හේතුව අපගේ සිතියම් තීරුව වෙනස් වීමයි varchar. අපි එය nvarcharමෙම ගැටලුවේදී අර්ථ දැක්වුවහොත් මගේ දෙයක් සිදු නොවේ. තවමත් අපි ඇලුම් varcharඅපි හොඳ භාවිතා මෙම ප්රශ්නය මග LIKEප්රධාන වචනය වෙනුවට =.

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.