Varchar trong cơ sở dữ liệu mysql là gì?

Trong bài viết này, chúng ta sẽ xem xét kiểu dữ liệu varchar trong SQL bao gồm định nghĩa cơ bản và tổng quan, sự khác biệt so với varchar[n], hỗ trợ UTF-8, Đối chiếu, xem xét hiệu suất, v.v.

Dữ liệu đóng một phần quan trọng trong bất kỳ tổ chức nào và một thuộc tính mà nó được xác định được gọi là kiểu dữ liệu của nó. Nói một cách đơn giản, kiểu dữ liệu cho biết loại dữ liệu mà bất kỳ đối tượng, biến hoặc biểu thức nào có thể lưu trữ. Là nhà phát triển SQL, trong khi tạo bảng SQL, chúng ta phải hiểu và quyết định loại dữ liệu nào sẽ được chứa trong mỗi và mọi cột trong bảng. Giống như bất kỳ ngôn ngữ lập trình nào khác, SQL cũng hỗ trợ một loạt các loại dữ liệu có thể chứa dữ liệu số nguyên, dữ liệu ngày và giờ, dữ liệu ký tự, v.v. và cho phép bạn xác định các loại dữ liệu của riêng bạn. SQL varchar là một trong những kiểu dữ liệu nổi tiếng nhất và được sử dụng nhiều nhất trong số rất nhiều. Trong bài viết này, chúng ta sẽ tìm hiểu các khía cạnh khác nhau của SQL Server varchar trong máy chủ SQL

Dưới đây là phác thảo mà chúng tôi sẽ trình bày trong khối này

  1. Giới thiệu về kiểu dữ liệu varchar của SQL Server trong SQL Server
  2. Sử dụng varchar cho các khối văn bản lớn
  3. Có gì mới trong bản xem trước SQL Server 2019 cho kiểu dữ liệu varchar?
  4. Ảnh hưởng của đối chiếu trên SQL varchar trong SQL Server
  5. Hỗ trợ UTF-8 với varchar trong SQL Server 2019 CTP
  6. SQL Server varchar để chuyển đổi dữ liệu và hiển thị dữ liệu
  7. Cân nhắc về lưu trữ và hiệu suất khi sử dụng SQL Server varchar
  8. Tác động đến độ dài chuỗi của SQL varchar với các hàm CAST và CONVERT

Hãy tiếp tục và xem hành động đã nói ở trên

Vậy varchar trong SQL là gì?

Như tên gợi ý, varchar có nghĩa là dữ liệu ký tự thay đổi. Còn được gọi là Ký tự biến, nó là kiểu dữ liệu chuỗi có độ dài không xác định. Nó có thể chứa số, chữ cái và ký tự đặc biệt. Microsoft SQL Server 2008 [trở lên] có thể lưu trữ tối đa 8000 ký tự dưới dạng độ dài tối đa của chuỗi sử dụng kiểu dữ liệu varchar. SQL varchar thường chứa 1 byte cho mỗi ký tự và thêm 2 byte cho thông tin độ dài. Bạn nên sử dụng varchar làm kiểu dữ liệu khi các cột có độ dài thay đổi và dữ liệu thực tế nhỏ hơn nhiều so với dung lượng đã cho. Hãy chuyển sang SSMS và xem cách hoạt động của varchar

Ví dụ sau tạo ba biến [tên, giới tính và tuổi] với varchar làm kiểu dữ liệu và các giá trị khác nhau được gán cho chúng. Rõ ràng từ các tập kết quả được hiển thị bên dưới, theo mặc định, độ dài chuỗi của các cột varchar trong SQL là 1 và nó chỉ trả về giá trị đầu tiên của các biến [phần còn lại của chuỗi bị cắt bớt] khi không có độ dài chuỗi nào được chuyển cho dữ liệu varchar . Hàm len[] dùng để xác định số ký tự được lưu trong cột varchar

1

2

3

4

5

6

KHAI BÁO @tên AS varchar = 'john parker d''souza';  

KHAI BÁO @giới tính AS varchar = 'M'

KHAI BÁO @tuổi AS varchar = '23'

 

CHỌN @tên Tên, @gender Gender ,@age Age

CHỌN len[@tên] namelen, len[@gender] genderlen, len[@age] agelen

SQL varchar[max] khác với varchar[n] như thế nào?

Đôi khi, các nhà phát triển SQL [bao gồm cả tôi] thường xác định kiểu dữ liệu varchar mà không có độ dài và sau đó, không thể chèn các bản ghi chuỗi vào bảng SQL, điều này là do SQL Server phân bổ 1 khoảng cách ký tự làm giá trị mặc định cho cột varchar mà . Trong các tình huống thực tế, varchar[n] được sử dụng để lưu trữ giá trị độ dài thay đổi dưới dạng một chuỗi, ở đây 'n' biểu thị độ dài chuỗi tính bằng byte và nó có thể lên tới 8000 ký tự. Bây giờ, hãy tiếp tục và xem cách chúng ta có thể lưu trữ dữ liệu varchar SQL với độ dài chuỗi vào cột của bảng SQL. Tập lệnh bên dưới tạo bảng Demovarchar với một số dữ liệu trong đó. Và màn hình kết quả hiển thị hồ sơ của 7 nhân viên dựa trên phòng ban, độ tuổi, v.v.

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

TẠO BẢNG Demovarchar

[

Id int NOT NULL IDENTITY[1,1],

Họ varchar[10],

FirstName varchar[10],

Giới tính varchar,

Tên phòng ban varchar[20],

Tuổi int

]

CHÈN VÀO Demovarchar GIÁ TRỊ['Gilbert', 'Kevin','M','Tool Design',33]

CHÈN VÀO Demovarchar GIÁ TRỊ['Tamburello', 'Andrea','F','Marketing',45]

CHÈN VÀO Demovarchar GIÁ TRỊ['Johnson', 'David','M','Engineering',66]

CHÈN VÀO Demovarchar GIÁ TRỊ['Sharma', 'Bradley','M','Production',27]

CHÈN VÀO Demovarchar GIÁ TRỊ['Rapier', 'Abigail','F', 'Human Resources',38]

CHÈN VÀO Demovarchar GIÁ TRỊ['Martin', 'Kelly','F','Information Services',54]

CHÈN VÀO Demovarchar GIÁ TRỊ['Poland', 'Carole','F','Production Control',29]

CHỌN * TỪ Demovarchar

Giả sử, có thêm một nhân viên mới trong tổ chức và chúng tôi, với tư cách là nhà phát triển dữ liệu SQL, sẽ phải chèn bản ghi mới này vào bảng trên bằng cách sử dụng INSERT SQL Statement. Dưới đây là một ví dụ như vậy được hiển thị

1

CHÈN VÀO Demovarchar GIÁ TRỊ['Newton Hamilton', 'Isaac','M','Design Head',69]

Rất tiếc, SQL Server đã gặp lỗi và đã chấm dứt câu lệnh cho biết dữ liệu chuỗi hoặc nhị phân sẽ bị cắt bớt. Điều này xảy ra bởi vì, cột LastName varchar[10] có thể chứa tối đa 10 ký tự và ở đây chúng tôi đang cố gắng chèn một bản ghi mới có độ dài chuỗi ['Newton Hamilton'] rõ ràng là lớn hơn 10 ký tự. Để khắc phục nhanh, chúng ta có thể thay đổi bảng và tăng kiểu dữ liệu của cột varchar SQL, chẳng hạn như varchar[50] để chèn hàng mới. Thực thi đoạn mã dưới đây để THAY ĐỔI và CHÈN một bản ghi mới vào bảng. Ngoài ra, bạn có thể sử dụng các hàm LEN[] và DATALENGTH[] để xác định số lượng ký tự và kích thước lưu trữ theo byte tương ứng được lưu trữ trong cột varchar

1

2

3

4

ALTER BẢNG Demovarchar

ALTER COLUMN LastName varchar[50]

CHÈN VÀO Demovarchar GIÁ TRỊ['Newton Hamilton', 'Isaac','M','Design Head',69]

CHỌN * TỪ Demovarchar

Chúng tôi đã quan sát ở trên cách chúng tôi có thể đặt hoặc thay đổi độ dài chuỗi trong cột varchar SQL để đáp ứng nhu cầu kinh doanh. Tuy nhiên, hãy xem xét một kịch bản, trong đó chúng tôi không chắc chắn về kích thước dữ liệu sẽ được tải vào bảng SQL của mình, trong những trường hợp như vậy, việc kiểm tra và thay đổi kích thước loại dữ liệu cho mỗi và mọi cột không phải là một lựa chọn khả thi. Một trong các tùy chọn để xử lý việc này có thể là đặt độ dài chuỗi trên thanh cao hơn trong cột varchar của SQL Server [miễn là bạn có ước tính sơ bộ về độ dài của cột chuỗi sẽ xấp xỉ]

Một điểm quan trọng cần lưu ý, chúng ta chỉ có thể sử dụng độ dài chuỗi lên tới varchar[8000] vì đây là số ký tự tối đa mà kiểu dữ liệu SQL varchar[n] có thể chứa. Vì vậy, trong trường hợp có khả năng độ dài chuỗi của cột varchar có thể vượt quá 8000 byte, việc sử dụng varchar[8001] hoặc bất kỳ thứ gì cao hơn sẽ dẫn đến lỗi. Một ví dụ ngắn chứng minh thực tế này được hiển thị dưới đây

1

2

KHAI BÁO @tên AS varchar[8001] = 'john parker d''souza';  

CHỌN @tên Tên

SQL Server 2005 đã vượt qua giới hạn về kích thước lưu trữ 8KB này và cung cấp giải pháp thay thế với varchar[max]. Đây là loại dữ liệu ký tự có độ dài thay đổi lớn không phải Unicode và có thể lưu trữ tối đa 2^31-1 byte [2 GB] ký tự không phải Unicode

Khi tôi lần đầu tiên được giới thiệu các khái niệm về varchar[n] và SQL varchar, câu hỏi phổ biến giống như bất kỳ người mới bắt đầu nào khác mà tôi gặp phải là tại sao chúng ta không thể khai báo một cột kiểu dữ liệu varchar[8500] hoặc cao hơn, vì chúng ta có . Nếu dữ liệu được lưu trữ nhỏ hơn hoặc bằng 8000 byte, varchar[n] hoặc varchar[max] sẽ lưu trữ nó trong hàng. Tuy nhiên, nếu dữ liệu vượt quá kích thước 8000 byte thì nó được coi là Đối tượng lớn [LOB] và chúng không được lưu trữ theo hàng mà trong các trang LOB riêng biệt [LOB_DATA]. Hàng trong trường hợp như vậy sẽ chỉ có một con trỏ tới trang dữ liệu LOB nơi có dữ liệu thực tế và SQL Server sẽ tự động gán chỉ báo tràn dòng cho trang để thao tác với các hàng dữ liệu. Tóm lại, nếu bạn biết dữ liệu có thể vượt quá 8000 byte, thì tốt hơn là sử dụng varchar[max] làm kiểu dữ liệu

Chúng ta có thể tham khảo hệ thống DMV. dm_db_index_physical_stats để xem loại phân bổ trang nào [IN_ROW_DATA data/LOB_DATA/ ROW_OVERFLOW_DATA] được thực hiện. Bạn cũng có thể kiểm tra liên kết này trong trường hợp bạn muốn giải thích chi tiết về cách SQL Server thực hiện giới hạn hàng và trang với cả hai loại dữ liệu varchar[n] và varchar[max]

Hãy nhanh chóng chuyển sang SSMS và xem cách chúng ta có thể sử dụng varchar[max]. Thực thi đoạn script sau để chèn 1 bản ghi trong đó giá trị cột StringCol trong mỗi hàng là 15.000 ký tự B [i. e. 15.000 byte]

1

2

3

4

5

6

7

TẠO BẢNG Demovarcharmax

    [

      ID INT IDENTITY[1, 1] ,

      StringCol VARCHAR[MAX]

   ]

CHÈN  VÀO Demovarcharmax[StringCol] VALUES[REPLICATE[CAST['B' AS VARCHAR[MAX]], 15000]]

CHỌN Id, StringCol,len[StringCol] AS LengthOfString FROM Demovarcharmax

Một hạn chế của việc sử dụng varchar[max] là chúng ta không thể tạo một chỉ mục có varchar[max] làm cột chính, thay vào đó, nên tạo chỉ mục Toàn văn trên cột đó

Một lưu ý nhanh để thực hiện – Từ đây đến phần cuối cùng của bài viết này, chúng tôi sẽ đề cập đến varchar thay cho varchar[n]. KHÔNG coi nó là varchar với giá trị mặc định = 1

Để tìm hiểu thêm một số khác biệt thú vị giữa varchar[n] và varchar[max] trong SQL Server, hãy cân nhắc xem qua bài viết này, So sánh các kiểu dữ liệu VARCHAR[max] với VARCHAR[n] trong SQL Server

Hỗ trợ UTF-8 với SQL Server 2019 CTP

Trước khi chúng tôi tìm hiểu tính năng xem trước của SQL Server 2019 cung cấp cho SQL varchar, hãy nhanh chóng xem xét một loại dữ liệu thú vị hơn - trước tiên là 'nvarchar'. Giống như SQL Server varchar [[n. max]], chúng ta có SQL nvarchar [[n. max]], tiền tố n trong nvarchar biểu thị Unicode, i. e. nó lưu trữ cả dữ liệu Unicode và không phải Unicode. Sự khác biệt chính giữa varchar và nvarchar là cách chúng được lưu trữ, varchar được lưu trữ dưới dạng dữ liệu 8 bit thông thường [1 byte cho mỗi ký tự] và nvarchar lưu trữ dữ liệu ở mức 2 byte cho mỗi ký tự. Vì lý do này, nvarchar có thể chứa tối đa 4000 ký tự và nó chiếm gấp đôi dung lượng như SQL varchar. Bạn có thể đi qua liên kết này để tìm hiểu thêm về nvarchar trong SQL Server

Với bản xem trước công khai của SQL Server 2019, Microsoft đã công bố hỗ trợ mã hóa ký tự UTF-8 cho các loại dữ liệu hiện có [varchar và char]. Đối với những người chưa biết về UTF-8, nó là viết tắt của Unicode Transformation Format và là một mã hóa dựa trên Unicode hỗ trợ nhiều ngôn ngữ. 8 trong UTF-8 có nghĩa là nó sử dụng 1 byte [8 bit] để biểu thị một ký tự trong bộ nhớ. Tương tự, UTF-16 sử dụng 16 bit [2 byte] để biểu diễn một ký tự. Chúng tôi sẽ giới hạn phạm vi của cải tiến CTP SQL Server 2019 mới này đối với ‘SQL varchar’ chỉ trong bài viết này

Cải tiến này có tác động sau trong SQL Server. Là

  1. Cải thiện khả năng tương thích dữ liệu

    Cho đến SQL Server 2019 CTP, kiểu dữ liệu varchar của SQL chỉ có khả năng lưu trữ dữ liệu Non-Unicode và với bản xem trước này, giờ đây chúng ta có thể tạo một cột varchar để lưu trữ dữ liệu Unicode trong các đối chiếu hỗ trợ UTF-8 [_UTF8]. UTF-8 được cho phép trong kiểu dữ liệu varchar và được bật khi tạo hoặc thay đổi đối chiếu của đối tượng thành đối chiếu có hậu tố UTF8. Điều này giúp giảm thiểu các vấn đề chuyển đổi ký tự

  2. Giảm lưu trữ và cải thiện hiệu suất

    Hỗ trợ UTF-8 cho kiểu dữ liệu varchar giúp tiết kiệm dung lượng lưu trữ đáng kể tùy thuộc vào bộ ký tự được sử dụng. Ví dụ: sử dụng phép đối chiếu hỗ trợ UTF-8, thay đổi kiểu dữ liệu cột từ nvarchar[20] thành varchar[20] sẽ giảm đáng kể yêu cầu lưu trữ vì nvarchar[20] yêu cầu 40 byte để lưu trữ và varchar[20] cần 20 byte

Lưu ý bên lề quan trọng – Vì cải tiến này vẫn đang trong giai đoạn xem trước nên chúng tôi có thể mong đợi nhiều tiến triển hơn về mặt này trong tương lai gần. Tuy nhiên, các kiểu dữ liệu Unicode [UTF-16] hiện có [nchar, nvarchar và ntext] vẫn không thay đổi trong bản xem trước SQL Server 2019

Đối chiếu với SQL varchar trong SQL Server 2019 CTP

Đối chiếu trong SQL Server xác định cấu hình để xác định các quy tắc khác nhau như độ nhạy trường hợp, độ nhạy trọng âm, sắp xếp, loại ký tự và chiều rộng, v.v. Hiểu tất cả các thuộc tính này và cách chúng hoạt động với dữ liệu của bạn trở nên rất quan trọng. Đối chiếu có thể được đặt ở cấp độ máy chủ, cơ sở dữ liệu, biểu thức hoặc cột. UTF-8 hỗ trợ đối chiếu cấp cơ sở dữ liệu hoặc cấp cột trong SQL Server 2019 CTP và được bật khi bạn tạo hoặc thay đổi đối chiếu Cơ sở dữ liệu hoặc cột thành đối chiếu có hậu tố UTF8

Nếu bạn thực hiện truy vấn bên dưới đối với SQL Server 2019 CTP, bạn sẽ có thể xem tất cả các đối chiếu được hỗ trợ UTF-8 trên phiên bản SQL Server của bạn bằng hàm [fn_helpcollations[]]

1

2

3

CHỌN Tên, Mô tả

TỪ fn_helpcollations[]

WHERE Tên like '%UTF8';

Chủ Đề