char và varchar (Transact-SQL)

Bạn đang xem: char_length trong máy chủ sql

char và varchar (Transact-SQL)

Trong bài viết này

Áp dụng cho: SQL Server (tất cả các phiên bản được hỗ trợ) Cơ sở dữ liệu Azure SQL Azure SQL Managed Instance Azure Synapse Analytics Hệ thống phân tích nền tảng (PDW)

Các kiểu dữ liệu ký tự có kích thước cố định, char hoặc kích thước thay đổi, varchar . Bắt đầu với SQL Server 2019 (15.x), khi sử dụng đối chiếu hỗ trợ UTF-8, các loại dữ liệu này sẽ lưu trữ toàn bộ dữ liệu ký tự Unicode và sử dụng UTF-8 . Nếu đối chiếu không phải UTF-8 được chỉ định, thì các loại dữ liệu này chỉ lưu trữ một tập hợp con các ký tự được hỗ trợ bởi trang mã tương ứng của đối chiếu đó.

Đối số

char [(n)]
Dữ liệu chuỗi có kích thước cố định. n xác định kích thước chuỗi theo byte và phải là giá trị từ 1 đến 8.000. Đối với bộ ký tự mã hóa một byte như tiếng Latinh, kích thước lưu trữ là n byte và số ký tự có thể lưu trữ cũng là n. Đối với bộ ký tự mã hóa nhiều byte, kích thước lưu trữ vẫn là n byte nhưng số lượng ký tự có thể lưu trữ có thể nhỏ hơn n. Từ đồng nghĩa ISO của char ký tự . Để biết thêm thông tin về các bộ ký tự, hãy xem Bộ ký tự một byte và nhiều byte .

varchar [(n | max )]
Dữ liệu chuỗi có kích thước thay đổi. Sử dụng n để xác định kích thước chuỗi theo byte và có thể là giá trị từ 1 đến 8.000 hoặc sử dụng max để chỉ ra kích thước ràng buộc cột lên đến bộ nhớ tối đa là 2 ^ 31-1 byte (2 GB) . Đối với bộ ký tự mã hóa một byte như tiếng Latinh, kích thước lưu trữ là n byte + 2 byte và số ký tự có thể lưu trữ cũng là n. Đối với bộ ký tự mã hóa nhiều byte, kích thước lưu trữ vẫn là n byte + 2 byte nhưng số ký tự có thể lưu trữ có thể nhỏ hơn n. Các từ đồng nghĩa ISO của varchar charvarying hoặc charactervarying . Để biết thêm thông tin về các bộ ký tự, hãy xem Bộ ký tự một byte và nhiều byte .

Nhận xét

Một quan niệm sai lầm phổ biến là nghĩ rằng CHAR (n) và VARCHAR (n) , n xác định số ký tự. Nhưng trong CHAR (n) và VARCHAR (n) , n xác định độ dài chuỗi bằng byte (0-8.000). n không bao giờ xác định số lượng ký tự có thể được lưu trữ. Điều này tương tự với định nghĩa của NCHAR (n) và NVARCHAR (n) .
Quan niệm sai lầm xảy ra bởi vì khi sử dụng mã hóa byte đơn, kích thước lưu trữ của CHAR và VARCHAR là n byte và số ký tự cũng là n. Tuy nhiên, đối với mã hóa nhiều byte, chẳng hạn như UTF-8 , các dải Unicode cao hơn (128-1,114,111) dẫn đến một ký tự sử dụng hai byte trở lên. Ví dụ: trong một cột được định nghĩa là CHAR (10), Công cụ cơ sở dữ liệu có thể lưu trữ 10 ký tự sử dụng mã hóa byte đơn (dãy Unicode 0-127), nhưng ít hơn 10 ký tự khi sử dụng mã hóa nhiều byte (dãy Unicode 128- 1.114.111). Để biết thêm thông tin về lưu trữ Unicode và phạm vi ký tự, hãy xem Sự khác biệt về lưu trữ giữa UTF-8 và UTF-16 .

Khi n không được chỉ định trong định nghĩa dữ liệu hoặc câu lệnh khai báo biến, độ dài mặc định là 1. Nếu n không được chỉ định khi sử dụng hàm CAST và CONVERT, độ dài mặc định là 30.

Xem Thêm  Thuộc tính CSS - tất cả danh sách thuộc tính css

Các đối tượng sử dụng char hoặc varchar được chỉ định đối chiếu mặc định của cơ sở dữ liệu, trừ khi đối chiếu cụ thể được chỉ định bằng mệnh đề COLLATE. Đối chiếu kiểm soát trang mã được sử dụng để lưu trữ dữ liệu ký tự.

Các bảng mã đa byte trong SQL Server bao gồm:

  • Bộ ký tự 2 byte (DBCS) cho một số ngôn ngữ Đông Á sử dụng mã trang 936 và 950 (tiếng Trung), 932 (tiếng Nhật) hoặc 949 (tiếng Hàn).
  • UTF-8 với trang mã 65001. Áp dụng cho: SQL Server (Bắt đầu với SQL Server 2019 (15.x)))

Nếu bạn có các trang web hỗ trợ nhiều ngôn ngữ:

  • Bắt đầu với SQL Server 2019 (15.x), hãy cân nhắc sử dụng đối chiếu hỗ trợ UTF-8 để hỗ trợ Unicode và giảm thiểu các vấn đề chuyển đổi ký tự.
  • Nếu sử dụng phiên bản thấp hơn của SQL Server Database Engine, hãy cân nhắc sử dụng kiểu dữ liệu Unicode nchar hoặc nvarchar để giảm thiểu các vấn đề chuyển đổi ký tự.

Nếu bạn sử dụng char hoặc varchar , chúng tôi khuyên bạn nên:

  • Sử dụng char khi kích thước của các mục dữ liệu cột nhất quán.
  • Sử dụng varchar khi kích thước của các mục dữ liệu cột khác nhau đáng kể.
  • Sử dụng varchar (max) khi kích thước của các mục dữ liệu cột khác nhau đáng kể và độ dài chuỗi có thể vượt quá 8.000 byte.

Nếu SET ANSI_PADDING bị TẮT khi TẠO BẢNG hoặc BẢNG ALTER được thực thi, cột char được xác định là NULL sẽ được xử lý dưới dạng varchar .

Cảnh báo

Mỗi cột varchar (tối đa) hoặc nvarchar (tối đa) không null yêu cầu 24 byte phân bổ cố định bổ sung, tính theo giới hạn hàng 8.060 byte trong một thao tác sắp xếp. Điều này có thể tạo ra một giới hạn ngầm đối với số lượng cột varchar (tối đa) hoặc nvarchar (tối đa) không null có thể được tạo trong một bảng.
Không có lỗi đặc biệt nào được cung cấp khi bảng được tạo (ngoài cảnh báo thông thường rằng kích thước hàng tối đa vượt quá mức tối đa cho phép là 8.060 byte) hoặc tại thời điểm chèn dữ liệu. Kích thước hàng lớn này có thể gây ra lỗi (chẳng hạn như lỗi 512) trong một số hoạt động bình thường, chẳng hạn như cập nhật khóa chỉ mục theo nhóm hoặc các loại tập hợp cột đầy đủ, điều này sẽ chỉ xảy ra khi thực hiện một thao tác.

Chuyển đổi dữ liệu ký tự

Khi biểu thức ký tự được chuyển đổi thành kiểu dữ liệu ký tự có kích thước khác, các giá trị quá dài đối với kiểu dữ liệu mới sẽ bị cắt bớt. Loại uniqueidentifier được coi là một loại ký tự cho mục đích chuyển đổi từ một biểu thức ký tự và do đó, tuân theo các quy tắc cắt bớt để chuyển đổi thành một loại ký tự. Xem phần Ví dụ sau đây.

Khi một biểu thức ký tự được chuyển đổi thành biểu thức ký tự có kiểu dữ liệu hoặc kích thước khác, chẳng hạn như từ char (5) thành varchar (5) hoặc < strong> char (20) thành char (15) , đối chiếu của giá trị đầu vào được gán cho giá trị đã chuyển đổi. Nếu một biểu thức không ký tự được chuyển đổi thành kiểu dữ liệu ký tự, đối chiếu mặc định của cơ sở dữ liệu hiện tại được gán cho giá trị được chuyển đổi. Trong cả hai trường hợp, bạn có thể chỉ định đối chiếu cụ thể bằng cách sử dụng điều khoản COLLATE .

Xem Thêm  Cách sử dụng SQL trong Python - python làm thế nào để sử dụng trong

Lưu ý

Bản dịch trang mã được hỗ trợ cho các loại dữ liệu char varchar , nhưng không hỗ trợ cho loại dữ liệu văn bản . Cũng như các phiên bản SQL Server trước đó, việc mất dữ liệu trong quá trình dịch trang mã không được báo cáo.

Biểu thức ký tự đang được chuyển đổi thành kiểu dữ liệu số gần đúng có thể bao gồm ký hiệu hàm mũ tùy chọn. Kí hiệu này là chữ e viết thường hoặc chữ hoa E, theo sau là dấu cộng (+) hoặc dấu trừ (-) tùy chọn và sau đó là một số.

Các biểu thức ký tự đang được chuyển đổi thành kiểu dữ liệu số chính xác phải bao gồm các chữ số, một dấu thập phân và một dấu cộng (+) hoặc dấu trừ (-) tùy chọn. Các ô trống hàng đầu được bỏ qua. Dấu phân tách bằng dấu phẩy, chẳng hạn như dấu phân tách hàng nghìn ở 123,456,00, không được phép trong chuỗi.

Biểu thức ký tự được chuyển đổi thành kiểu dữ liệu money hoặc smallmoney cũng có thể bao gồm dấu thập phân tùy chọn và ký hiệu đô la ($). Dấu phân cách bằng dấu phẩy, như $ 123,456,00, được cho phép.

Khi một chuỗi trống được chuyển đổi thành int , giá trị của nó sẽ trở thành 0 . Khi một chuỗi trống được chuyển đổi thành một ngày, giá trị của nó sẽ trở thành giá trị mặc định cho ngày – là 1900-01-01 .

Ví dụ

A. Hiển thị giá trị mặc định của n khi được sử dụng trong khai báo biến

Ví dụ sau đây cho thấy giá trị mặc định của n là 1 cho các kiểu dữ liệu char varchar khi chúng được sử dụng trong khai báo biến.

  KHAI BÁO @myVariable AS VARCHAR = 'abc';
DECLARE @myNextVariable AS CHAR = 'abc';
--Sau đây trả về 1
CHỌN DATALENGTH (@myVariable), DATALENGTH (@myNextVariable);
ĐI
 

B. Hiển thị giá trị mặc định của n khi varchar được sử dụng với CAST và CONVERT

Ví dụ sau cho thấy giá trị mặc định của n là 30 khi các kiểu dữ liệu char hoặc varchar được sử dụng với CAST và < mã> CHUYỂN ĐỔI các chức năng.

 DECLARE @myVariable AS VARCHAR (40);
SET @myVariable = 'Chuỗi này dài hơn ba mươi ký tự';
CHỌN CAST (@myVariable AS VARCHAR);
CHỌN DATALENGTH (CAST (@myVariable AS VARCHAR)) NHƯ 'VarcharDefaultLength';
CHỌN CHUYỂN ĐỔI (CHAR, @myVariable);
CHỌN DATALENGTH (CHUYỂN ĐỔI (CHAR, @myVariable)) NHƯ 'VarcharDefaultLength';
 

C. Chuyển đổi dữ liệu cho các mục đích hiển thị

Ví dụ sau chuyển đổi hai cột thành kiểu ký tự và áp dụng kiểu áp dụng định dạng cụ thể cho dữ liệu được hiển thị. Kiểu money được chuyển đổi thành dữ liệu ký tự và áp dụng kiểu 1, kiểu này hiển thị các giá trị có dấu phẩy mỗi ba chữ số ở bên trái dấu thập phân và hai chữ số ở bên phải dấu thập phân. Loại datetime được chuyển đổi thành dữ liệu ký tự và áp dụng kiểu 3, hiển thị dữ liệu ở định dạng dd / mm / yy. Trong mệnh đề WHERE, kiểu money được chuyển thành kiểu ký tự để thực hiện thao tác so sánh chuỗi.

  SỬ DỤNG AdventureWorks2012;
ĐI
CHỌN BusinessEntityID,
   Bán hàngYTD,
   CHUYỂN ĐỔI (VARCHAR (12), SalesYTD, 1) AS MoneyDisplayStyle1,
   GETDATE () AS CurrentDate,
   CHUYỂN ĐỔI (VARCHAR (12), GETDATE (), 3) AS DateDisplayStyle3
TỪ Sales.SalesPerson
WHERE CAST (SalesYTD AS VARCHAR (20)) THÍCH '1%';
 

Đây là tập hợp kết quả.

  BusinessEntityID SalesYTD DisplayFormat CurrentDate DisplayDateFormat
---------------- --------------------------------- ----------------------- -----------------
278 1453719.4653 1.453.719.47 2011/05/07 14: 29: 01.193 07/05/11
280 1352577,1325 1,352,577,13 2011/05/07 14: 29: 01.193 07/05/11
283 1573012.9383 1.573.012,94 2011/05/07 14: 29: 01.193 07/05/11
284 1576562.1966 1.576.562.20 2011/05/07 14: 29: 01.193 07/05/11
285 172524.4512 172.524.45 2011/05/07 14: 29: 01.193 07/05/11
286 1421810.9242 1.421.810,92 2011/05/07 14: 29: 01.193 07/05/11
288 1827066.7118 1.827.066.71 2011/05/07 14: 29: 01.193 07/05/11
 

D. Chuyển đổi dữ liệu bảo mật duy nhất

Ví dụ sau chuyển đổi giá trị uniqueidentifier thành kiểu dữ liệu char .

  KHAI BÁO @myid uniqueidentifier = NEWID ();
CHỌN CHUYỂN ĐỔI (CHAR (255), @myid) NHƯ 'char';
 

Ví dụ sau minh họa việc cắt bớt dữ liệu khi giá trị quá dài đối với kiểu dữ liệu được chuyển đổi thành. Vì loại uniqueidentifier được giới hạn trong 36 ký tự nên các ký tự vượt quá độ dài đó sẽ bị cắt bớt.

  DECLARE @ID NVARCHAR (max) = N'0E984725-C51C-4BF4-9960-E1C80E27ABA0wrong ';
CHỌN @ID, CHUYỂN ĐỔI (uniqueidentifier, @ID) AS TruncatedValue;
 

Đây là tập hợp kết quả.

  String TruncatedValue
------------------------------------------------ ------------------------------
0E984725-C51C-4BF4-9960-E1C80E27ABA0 sai 0E984725-C51C-4BF4-9960-E1C80E27ABA0

(1 hàng bị ảnh hưởng)
 

Xem thêm

nchar và nvarchar (Giao dịch-SQL)

Xem Thêm  Loại dữ liệu chuỗi trong JavaScript - kiểu dữ liệu chuỗi trong javascript

ĐÚC và CHUYỂN ĐỔI (Giao dịch-SQL)

COLLATE (Giao dịch-SQL)

Chuyển đổi loại dữ liệu (Công cụ cơ sở dữ liệu)

Kiểu dữ liệu (Giao dịch-SQL)

Ước tính kích thước của cơ sở dữ liệu

Hỗ trợ đối chiếu và Unicode

Bộ ký tự một byte và nhiều byte


Xem thêm những thông tin liên quan đến chủ đề char_length trong máy chủ sql

Q30 how to use CHAR_LENGTH, CONCAT, UPPER, LOWER, AVG SQL Functions

  • Tác giả: Dr. bad boy
  • Ngày đăng: 2022-06-10
  • Đánh giá: 4 ⭐ ( 3343 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: This problem describes how to write the query statement used for CHAR_LENGTH, CONCAT, UPPER, LOWER, and AVG SQL functions and the inner join query used to join tables.

    mySQL Navicat mySQL_Workbench dbms HeidiSQL

Viết hoa chỉ chữ cái đầu tiên của mỗi từ trong mỗi câu trong SQL Server

  • Tác giả: qastack.vn
  • Đánh giá: 3 ⭐ ( 7679 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: [Tìm thấy giải pháp!] declare @a varchar(30); set @a = ‘qWeRtY kEyBoArD TEST<>&””X’; select stuff(( select ‘ ‘+upper(left(T3.V, 1))+lower(stuff(T3.V, 1,…

varchar2

  • Tác giả: helpex.vn
  • Đánh giá: 5 ⭐ ( 6406 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: Helpex – Trao Đổi & Giúp Đỡ – chia sẻ, hỏi đáp kiến thức các lĩnh vực, gặp gỡ các chuyên gia kế toán, it…

Hàm CHAR_LENGTH trong MySQL

  • Tác giả: mylop.edu.vn
  • Đánh giá: 5 ⭐ ( 7609 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: Trong bài này mình sẽ hướng dẫn cách sử dụng hàm CHAR_LENGTH trong MySQL thông qua cú pháp và ví dụ thực tế.

Hướng dẫn cấu hình SQL Server Replication hoàn chỉnh

  • Tác giả: comdy.vn
  • Đánh giá: 3 ⭐ ( 3498 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: Bài viết này liệt kê các kiểu nhân rộng trong SQL Server, giải thích cách hoạt động và hướng dẫn cách thực hiện nhân rộng với SQL Server Replication.

Kiểm tra lỗ hổng bảo mật SQL Injection

  • Tác giả: websitehcm.com
  • Đánh giá: 4 ⭐ ( 6637 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: Kiểm tra lỗ hổng bảo mật SQL Injection w3seo là kiểm tra xem có thể đưa dữ liệu vào ứng dụng để ứng dụng thực thi truy vấn SQL

Hàm CHAR_LENGTH – My SQL

  • Tác giả: hoctoantap.com
  • Đánh giá: 4 ⭐ ( 6835 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: Hàm CHAR_LENGTH – My SQL là một trong các hàm trong danh sách được cung cấp sẵn cho người sử dụng khi thao tác với hệ quản trị cơ sở dữ liệu My SQL. Hàm CHAR

Xem thêm các bài viết khác thuộc chuyên mục: Kiến thức lập trình

By ads_php