คำถามติดแท็ก varchar

โดยปกติหมายถึงชนิดข้อมูลสตริงความยาวตัวแปร

5
เขียนความแตกต่างระหว่าง varchar และ nvarchar
ขณะนี้อยู่ในฐานข้อมูลของเรา SQL Server 2012, เรากำลังใช้และเราต้องการที่จะเปลี่ยนที่varchar nvarcharฉันสร้างสคริปต์ขึ้นมาแล้ว คำถามของฉันมีความแตกต่างในวิธี SQL Server เขียนไปยังvarcharคอลัมน์กับnvarcharคอลัมน์? เรามีขั้นตอนการแบ็กเอนด์ที่ฉันกังวล แก้ไข: ไม่แน่ใจว่าสิ่งนี้ช่วยได้หรือไม่ แต่คอลัมน์ไม่มีดัชนี, f / k หรือข้อ จำกัด

3
ประสิทธิภาพของการใช้ CHAR กับ VARCHAR ในฟิลด์ขนาดคงที่คืออะไร
ฉันมีคอลัมน์ที่จัดทำดัชนีซึ่งจัดเก็บ MD5 แฮช ดังนั้นคอลัมน์จะเก็บค่า 32 อักขระเสมอ ไม่ว่าจะด้วยเหตุผลใดก็ตามสิ่งนี้ถูกสร้างขึ้นเป็น varchar แทนที่จะเป็นถ่าน มันคุ้มค่าปัญหาของการโยกย้ายฐานข้อมูลเพื่อแปลงเป็นถ่านหรือไม่ นี่คือใน MySQL 5.0 พร้อม InnoDB

6
ความหมายของประสิทธิภาพของขนาด MySQL VARCHAR
มีความแตกต่างของประสิทธิภาพใน MySQL ระหว่างขนาด varchar หรือไม่ ยกตัวอย่างเช่นและvarchar(25) varchar(64000)ถ้าไม่มีมีเหตุผลที่จะไม่ประกาศ varchars ทั้งหมดที่มีขนาดสูงสุดเพียงเพื่อให้แน่ใจว่าคุณไม่ได้ออกจากห้อง?

3
คำนำหน้า N ก่อนสตริงในแบบสอบถาม Transact-SQL
คุณช่วยบอกฉันทีฉันควรใช้คำนำหน้า N ก่อนสตริงในแบบสอบถาม Transact-SQL? ฉันเริ่มทำงานกับฐานข้อมูลที่ฉันไม่ได้รับผลลัพธ์ใด ๆ โดยใช้แบบสอบถามเช่นนี้ SELECT * FROM a_table WHERE a_field LIKE '%а_pattern%' N'%а_pattern%'จนกว่าฉันจะเปลี่ยนรูปแบบไป ฉันไม่เคยเพิ่มคำนำหน้านี้มาก่อนดังนั้นฉันอยากรู้ a_fieldถูกกำหนดให้เป็นnvarchar(255)แต่ฉันคิดว่าเหตุผลเป็นอย่างอื่น

2
เป็นไปได้ INDEX บนเขตข้อมูล VARCHAR ใน MySql
ฉันทำงานในฐานข้อมูล MySqlโดยมีตารางดังนี้: +--------------+ | table_name | +--------------+ | myField | +--------------+ ... และฉันต้องการสอบถามจำนวนมากเช่นนี้(มี 5-10 สตริงในรายการ) : SELECT myField FROM table_name WHERE myField IN ('something', 'other stuff', 'some other a bit longer'...) จะมีแถวที่ไม่ซ้ำประมาณ 24.000.000 แถว 1)ฉันควรใช้ a FULLTEXTหรือและที่INDEXสำคัญสำหรับของฉันVARCHAR(150)? 2)ถ้าฉันเพิ่มตัวอักษรจาก 150 เป็น 220 หรือ 250 ... มันจะสร้างความแตกต่างได้หรือไม่? (มีวิธีการคำนวณหรือไม่?) 3)ตามที่ฉันพูดพวกเขาจะไม่ซ้ำกันดังนั้นสนามของฉันควรเป็นคีย์หลัก การเพิ่มคีย์หลักในฟิลด์ซึ่งเป็น VARCHAR INDEX …

4
ฉันควรเพิ่มขีดจำกัดความยาวตามอำเภอใจในคอลัมน์ VARCHAR หรือไม่
ตามเอกสารของ PostgreSQLไม่มีความแตกต่างระหว่างประสิทธิภาพVARCHAR, และVARCHAR(n)TEXT ฉันควรเพิ่มขีดจำกัดความยาวตามอำเภอใจในคอลัมน์ชื่อหรือที่อยู่หรือไม่? แก้ไข:ไม่ใช่รายการที่: การค้นหาดัชนีจะเร็วขึ้นอย่างเห็นได้ชัดด้วย char vs varchar หรือไม่เมื่อค่าทั้งหมดเป็น 36 ตัวอักษร ฉันรู้ว่าCHARประเภทนี้เป็นของที่ระลึกในอดีตและฉันไม่เพียง แต่สนใจในการแสดงเท่านั้น

1
การค้นหาดัชนีจะเร็วขึ้นอย่างเห็นได้ชัดด้วย char vs varchar หรือไม่เมื่อค่าทั้งหมดเป็น 36 ตัวอักษร
ฉันมีแบบแผนดั้งเดิม (ข้อจำกัดความรับผิดชอบ!) ที่ใช้รหัสที่สร้างโดยใช้แฮชสำหรับคีย์หลักสำหรับตารางทั้งหมด (มีจำนวนมาก) ตัวอย่างของ ID ดังกล่าวคือ: 922475bb-ad93-43ee-9487-d2671b886479 ไม่มีความหวังที่เป็นไปได้ในการเปลี่ยนวิธีการนี้อย่างไรก็ตามประสิทธิภาพของการเข้าถึงดัชนีนั้นไม่ดี การตั้งค่ากันมากมายเหตุผลนี้อาจจะมีสิ่งหนึ่งที่ผมสังเกตเห็นว่าดูเหมือนน้อยกว่าที่ดีที่สุด - แม้จะมีค่า ID ทั้งหมดในตารางมากทั้งหมดเป็นว่า 36 ตัวอักษรความยาวชนิดคอลัมน์varchar(36), ไม่ char(36) การเปลี่ยนประเภทคอลัมน์เป็นความยาวคงที่จะchar(36)ให้ประโยชน์ด้านดัชนีอย่างมีนัยสำคัญหรือไม่นอกเหนือจากการเพิ่มจำนวนรายการต่อหน้าดัชนีเป็นต้น? คือ postgres ทำงานเร็วกว่ามากเมื่อจัดการกับประเภทความยาวคงที่มากกว่าประเภทความยาวผันแปรหรือไม่ โปรดอย่าพูดถึงการประหยัดพื้นที่เก็บข้อมูลขนาดจิ๋ว - ไม่เป็นไรเมื่อเทียบกับการผ่าตัดที่จำเป็นในการเปลี่ยนแปลงคอลัมน์

1
การตัดฟิลด์ Varchar (สูงสุด) หลังจาก 8000 ตัวอักษร
varchar(max)ผมมีข้อมูลในการจัดเก็บข้อมูลบางข้อมูลที่มีการประกาศให้เป็น เพื่อความเข้าใจของฉันนี้ควรเก็บ2^31 - 1อักขระ แต่เมื่อฉันป้อนเนื้อหาบางส่วนมากกว่า 8000 ตัวอักษรมันตัดส่วนที่เหลือออก ฉันได้ตรวจสอบแล้วว่าข้อมูลทั้งหมดรวมอยู่ในคำสั่งการปรับปรุงของฉันและแบบสอบถามดูดีทุกที่อื่น แต่เมื่อฉันเลือกข้อมูลกลับมันถูกตัดออกไป ข้อมูลถูกตัดทอนเมื่อฉันแสดงบนเว็บไซต์ของฉันและเมื่อฉันใช้ SSMS select content from tableด้วย select DATALENGTH (content) from table กลับมาเป็น 8000 ฉันตั้งค่าข้อมูลโดยใช้สิ่งนี้: update table set content = 'my long content' where id = 1. เนื้อหามี HTML จำนวนมาก แต่ฉันไม่เห็นสาเหตุที่ทำให้เกิดปัญหา สิ่งเดียวที่ฉันเห็นว่าฉันกำลังทำอยู่คือแทนที่ทั้งหมด"ด้วย''สิ่งนี้คือเนื้อหาที่ผู้ใช้ป้อน (จำไม่ได้ว่าทำไมฉันถึงทำตอนนี้) ฉันจัดการเพื่อให้เนื้อหาเข้าสู่อย่างถูกต้องโดยลบเครื่องหมายคำพูดเดี่ยวทั้งหมดในเนื้อหาดังนั้นฉันคิดว่ามีบางสิ่งผิดปกติเกิดขึ้นกับข้อมูลของฉันมากกว่าฐานข้อมูล ฉันควรจะทำสิ่งพิเศษกับแบบสอบถามเพื่อใช้varchar(max)เขตข้อมูลหรือไม่ การใช้: SQL Server 2008 (10.50) 64 บิต

2
เหตุใดฟังก์ชัน LEN () จึงประเมินค่าความสำคัญต่ำใน SQL Server 2014
ฉันมีตารางที่มีคอลัมน์สตริงและเพรดิเคตที่ตรวจสอบแถวที่มีความยาวแน่นอน ใน SQL Server 2014 ฉันเห็นการประมาณ 1 แถวโดยไม่คำนึงถึงความยาวที่ฉันกำลังตรวจสอบ นี่เป็นแผนที่แย่มากเพราะมีหลายพันหรือหลายล้านแถวและ SQL Server เลือกที่จะวางตารางนี้ไว้ที่ด้านนอกของลูปที่ซ้อนกัน มีคำอธิบายสำหรับการประมาณค่า cardinality ที่ 1.0003 สำหรับ SQL Server 2014 หรือไม่ในขณะที่ SQL Server 2012 ประมาณ 31,622 แถว มีวิธีแก้ปัญหาที่ดีหรือไม่? นี่คือการทำซ้ำสั้น ๆ ของปัญหา: -- Create a table with 1MM rows of dummy data CREATE TABLE #customers (cust_nbr VARCHAR(10) NOT NULL) GO INSERT …

2
ใช้ข้อความสูงสุด MAX หรือเฉพาะเจาะจงน้อยกว่านั้น
มีคนถูกตรวจสอบรหัส DDL ของการสร้างตารางและแนะนำเมื่อพวกเขาเห็นผมเห็นโดยใช้VARCHAR(256)ฟิลด์สำหรับข้อความที่ผมคาดหวังว่าจะสวยขนาดเล็กเหมือนชื่อหรือสิ่งที่ฉันควรจะเสมอเพียงแค่ใช้VARCHAR(MAX)และเชื่อมโยงทำไมต้องใช้อะไร แต่ (สูงสุด varchar ) . ฉันอ่านมัน แต่ดูเหมือนว่ามันล้าสมัยเพราะมันมุ่งเน้นไปที่ปี 2005 และดูเหมือนจะไม่ได้เสนอเหตุผลที่แท้จริงในการจัดสรรที่อาจเกิดขึ้นถึง 2 GB ต่อแถวในเขตข้อมูลข้อความทั้งหมด จากมุมมองด้านประสิทธิภาพการจัดเก็บและอื่น ๆ เราควรตัดสินใจอย่างไรว่าจะใช้งานVARCHAR(MAX)หรือใช้SQL Server รุ่นใหม่ที่มีขนาดเฉพาะเจาะจงน้อยลง (เช่น 2008, 2012, 2014)

4
ผลของการตั้งค่า varchar (8000) คืออะไร?
เนื่องจาก varchar ใช้พื้นที่ดิสก์ตามสัดส่วนกับขนาดของเขตข้อมูลมีเหตุผลใดที่เราไม่ควรกำหนด varchar เป็นค่าสูงสุดเสมอเช่นvarchar(8000)ใน SQL Server บนโต๊ะสร้างถ้าฉันเห็นใครทำvarchar(100)ฉันควรบอกพวกเขาไม่ผิดคุณควรทำvarchar(8000)อย่างไร

1
ขีด จำกัด ขนาดของอักขระต่างกันไป Postgresql
ขีด จำกัด ขนาดของประเภทข้อมูลต่างๆใน postgresql คือเท่าไหร่ ผมเห็นบางที่สำหรับcharacter varying(n), varchar(n) nต้องอยู่ระหว่าง 1 ถึง 10485760. ว่าเป็นความจริง? อะไรคือขนาดที่ถูกต้องสำหรับcharacter(n), char(n)และtext?

3
varchar (255) หรือ varchar (256)?
ฉันควรใช้varchar(255)หรือvarchar(256)เมื่อออกแบบตาราง? ฉันได้ยินมาว่ามีการใช้หนึ่งไบต์สำหรับความยาวของคอลัมน์หรือเพื่อเก็บข้อมูลเมตา มันสำคัญอีกต่อไปแล้ว ณ จุดนี้? ฉันเห็นโพสต์บนอินเทอร์เน็ตอย่างไรก็ตามพวกเขาใช้กับ Oracle และ MySQL เรามี Microsoft SQL Server 2016 Enterprise Edition แล้วนำไปใช้กับสภาพแวดล้อมนี้ได้อย่างไร ตอนนี้พูดตัวอย่างเช่นถ้าฉันบอกให้ลูกค้าของฉันเก็บตัวอย่างคำอธิบายข้อความถึง 255 ตัวอักษรแทน 256 จะมีความแตกต่าง? สิ่งที่ฉันอ่าน "ด้วยความยาวสูงสุด 255 อักขระ DBMS สามารถเลือกใช้ไบต์เดียวเพื่อระบุความยาวของข้อมูลในฟิลด์ถ้าขีด จำกัด เป็น 256 หรือมากกว่านั้นจำเป็นต้องใช้สองไบต์" มันเป็นเรื่องจริงเหรอ?

3
มีจุดใดบ้างในการลดขนาดคอลัมน์ VARCHAR?
Googling แถว ๆนั้นดูเหมือนว่าจะมีการรายงานแบบผสมไม่ว่าขนาดของVARCHAR2คอลัมน์ใน Oracle จะส่งผลกระทบต่อประสิทธิภาพหรือไม่ ฉันต้องการที่จะให้คำถามVARCHARขนาดบิดเล็กน้อยและหวังว่าจะได้รับข้อมูลเชิงลึกในนี้: ที่กำหนด (หลาย) สาขาข้อความอิสระ ( ไม่ได้สิ่งที่สั้น ๆ เช่นชื่อ) ที่คุณต้องการในการจัดเก็บใน (Oracle) ฐานข้อมูลจะมีจุดใด (WRT. ประสิทธิภาพหรืออื่น ๆ ) ในไม่ maxing ออกVARCHARความจุ ( VARCHAR2(4000)ใน Oracle) แต่เลือก ค่าที่น้อยกว่าเช่น 1024 หรือ 512 เพราะนั่นน่าจะเพียงพอใน 98% ของคดีอยู่แล้ว

2
การแปลง VARCHAR เป็น VARBINARY
ฉันได้เก็บบันทึกข้อความค้นหาที่ใช้งานราคาแพงพร้อมกับแผนแบบสอบถามไว้ในตารางเพื่อให้เราสามารถตรวจสอบแนวโน้มด้านประสิทธิภาพและระบุพื้นที่ที่ต้องการเพิ่มประสิทธิภาพ อย่างไรก็ตามมาถึงจุดที่แผนการสืบค้นใช้พื้นที่มากเกินไป (เนื่องจากเราจัดเก็บทั้งแผนกับแต่ละแบบสอบถาม) ฉันจึงพยายามทำให้ข้อมูลที่มีอยู่เป็นปกติด้วยการแยก QueryPlanHash และ QueryPlan ไปยังตารางอื่น CREATE TABLE QueryPlans ( QueryPlanHash VARBINARY(25), QueryPlan XML, CONSTRAINT PK_QueryPlans PRIMARY KEY ( QueryPlanHash ) ); เนื่องจากคำจำกัดความของquery_plan_hashin sys.dm_exec_query_statsเป็นเขตข้อมูลไบนารี (และฉันจะแทรกข้อมูลใหม่เป็นประจำ) ฉันจึงใช้VARBINARYกับชนิดข้อมูลในตารางใหม่ของฉัน อย่างไรก็ตามการแทรกด้านล่างล้มเหลว ... INSERT INTO QueryPlans ( QueryPlanHash, QueryPlan ) SELECT queryplanhash, queryplan FROM ( SELECT p.value('(./@QueryPlanHash)[1]', 'varchar(20)') queryplanhash, QueryPlan, ROW_NUMBER() OVER (PARTITION …

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.